{"title":"Fazendo consultas","version":"1.10","locale":"pt-br","docname":"topics/db/queries","url":"/pt-br/1.10/topics/db/queries/","canonical":"https://djangodocs.dev/pt-br/1.10/topics/db/queries/","summary":"Uma vez que tenha criado seu modelos de dados , o Django automaticamente lhe dá uma API de abstração do banco de dados que deixa que crie, retorne, edite e delete…","html":"<h1>Fazendo consultas<a class=\"heading-anchor\" href=\"#making-queries\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Uma vez que tenha criado seu <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/models/\"><span class=\"doc\">modelos de dados</span></a>, o Django automaticamente lhe dá uma API de abstração do banco de dados que deixa que crie, retorne, edite e delete objetos. Este documento explica como usar essa API. Refira-se a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/\"><span class=\"doc\">Referência de modelo de dados</span></a> para detalhes completos de todos os vários modelos de opções de filtros.</p>\n<p>Ao longo deste guia ( e nas referências), nos referiremos sobre os seguintes modelos, os quais compreendem uma aplicação de blog web.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Blog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">tagline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"p\">)</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">)</span>\n    <span class=\"n\">body_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">mod_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">)</span>\n    <span class=\"n\">n_comments</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">n_pingbacks</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">rating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">headline</span>\n</code></pre></div>\n<section id=\"creating-objects\">\n<h2>Criando objetos<a class=\"heading-anchor\" href=\"#creating-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Para representar uma tabela de banco de dados em objetos Python, o Django usa um sistema intuitivo: Uma classe de modelo que representa uma tabela de banco de dados, e uma intância desta classe representa um registro particular em uma tabela de banco de dados.</p>\n<p>Para criar um objeto, instancie-o usando argumentos nomeados para a classe de modelo, então chame o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> para persistí-lo no banco de dados.</p>\n<p>Assumindo que os modelos estão em um arquivo <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/blog/models.py</span></code>, aqui um exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Beatles Blog&#39;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s1\">&#39;All the latest Beatles news.&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Este executa um comando SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code> por detrás dos panos. O Django não acessa o banco de dados até que você chame explicitamente o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<p>O método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> não retorna um valor .</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>O <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> recebe várias opções avançadas não descritas aqui. Veja a documentacão em <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> para detalhes completos.</p>\n<p>Para criar e salvar um objeto em um único passo, use o método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.create\" title=\"django.db.models.query.QuerySet.create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create()</span></code></a>.</p>\n</aside>\n</section>\n<section id=\"saving-changes-to-objects\">\n<h2>Salvando alterações para objetos<a class=\"heading-anchor\" href=\"#saving-changes-to-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Para salvar as alerações para um objeto que já existe no banco de dados, use o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<p>Dado uma instância <code class=\"docutils literal notranslate\"><span class=\"pre\">b5</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> que já tenha sido salva no banco de dados, este exemplo altera seu nome e atualiza seu registro no banco de dados:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b5</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;New name&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b5</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Isso executa um comando SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code> por detras dos panos. o Django não acessa o banco de dados até que você explicitamente chame o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<section id=\"saving-foreignkey-and-manytomanyfield-fields\">\n<h3>Salvando campos <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code><a class=\"heading-anchor\" href=\"#saving-foreignkey-and-manytomanyfield-fields\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Atualizar um campo do tipo <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> funciona exatamente da mesma maneira que salvar um campo normal – simplesmente assinale um objeto do tipo correto para o campo em questão. Este exemplo atualiza o atributo <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> de uma instância de <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>, assumindo que instâncias apropriadas de <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry``e</span> <span class=\"pre\">``Blog</span></code> já estejam salvas no banco de dados (então podemos retorná-las abaixo):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Entry</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">cheese_blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">cheese_blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Atualizar uma classe do tipo <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> funciona um pouco diferente – use o método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">add()</span></code></a> no campo para adicionar um registro para a relação. Este exemplo adiciona a instância <code class=\"docutils literal notranslate\"><span class=\"pre\">joe</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> ao objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">joe</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">joe</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Para adicionar múltiplos registros para um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> de uma só vez, inclua múltiplos argumentos na chamada do <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">add()</span></code></a>,  como aqui:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">john</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paul</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">george</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;George&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ringo</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Ringo&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">john</span><span class=\"p\">,</span> <span class=\"n\">paul</span><span class=\"p\">,</span> <span class=\"n\">george</span><span class=\"p\">,</span> <span class=\"n\">ringo</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>O Django irá reclamar se você tentar assinalar ou adicionar um objeto do tipo errado.</p>\n</section>\n</section>\n<section id=\"retrieving-objects\">\n<span id=\"id1\"></span><h2>Recuperando objetos<a class=\"heading-anchor\" href=\"#retrieving-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Para recuperar objetos do seu banco de dados, construa uma  <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> através da <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> na sua classe de modelo.</p>\n<p>A <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> representa uma coleção de objetos do seu banco de dados. Ele pode ter zero, um ou muitos * filtros*. Filtros  limitam os resultados baseado nos parâmetros dados. Em termos de SQL, um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>  equivale a um comando <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>, e um filtro é um clásula limitante tal como <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code>.</p>\n<p>Você chega a um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> usando o <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> do modelo. Cada mdoelo tem no mínimo um <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>, e é por padrão chamado <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/class/#django.db.models.Model.objects\" title=\"django.db.models.Model.objects\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">objects</span></code></a>. Acesse ele diretamente através da classe do modelo, como aqui:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n<span class=\"go\">&lt;django.db.models.manager.Manager object at ...&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Foo&#39;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Bar&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n<span class=\"go\">Traceback:</span>\n<span class=\"go\">    ...</span>\n<span class=\"go\">AttributeError: &quot;Manager isn&#39;t accessible via Blog instances.&quot;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Os <code class=\"docutils literal notranslate\"><span class=\"pre\">Managers</span></code> são acessíveis somente através das classes de modelo, e não de instâncias de modelos, para reforçar a separação entre operações no “nível das tabelas” e operações no “nível dos registros”.</p>\n</aside>\n<p>A <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> é a principal fonte de <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySets</span></code> para um modelo.  Por exemplo, <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog.objects.all()</span></code> retorna uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>  que contém todos os objetos do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> do banco de dados.</p>\n<section id=\"retrieving-all-objects\">\n<h3>Recuperando todos os objetos<a class=\"heading-anchor\" href=\"#retrieving-all-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A maneira mais simples de recuperar objeto de uma tabela é pegar todos eles. Para fazer isso, use o método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">all()</span></code></a> na <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">all_entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>O método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">all()</span></code></a> retorna uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> de todos os objetos do banco de dados.</p>\n</section>\n<section id=\"retrieving-specific-objects-with-filters\">\n<h3>Recuperando objetos específicos com filtros.<a class=\"heading-anchor\" href=\"#retrieving-specific-objects-with-filters\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> retornada pelo <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">all()</span></code></a> descreve todos os objetos da tabela do banco de dados. Em geral, porém, você precisa selecionar somente um subconjunto de todo o conjunto de objetos.</p>\n<p>Para criar o subconjunto, você refina o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> inicial, adicionando filtros de condições. As duas maneiras mais comuns de refinar um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> são:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">filter(**kwargs)</span></code></dt><dd><p>Retorna uma nova <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> contendo objetos que combinem com os parâmetros de filtros dados.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">exclude(**kwargs)</span></code></dt><dd><p>Retornam uma nova <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>  contendo objetos que <em>não</em> combinem com os parâmetros de filtros dados.</p>\n</dd>\n</dl>\n<p>Os parâmetros de filtros (<code class=\"docutils literal notranslate\"><span class=\"pre\">**kwargs</span></code> nas definições da função acima) devem estar no formato descrito em <a class=\"reference internal\" href=\"#field-lookups\">Filtros de campo</a> abaixo.</p>\n<p>Prr exemplo, para ter um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> de entradas de blog do ano 2006, use o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> como aqui:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2006</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Com a classe “manager” padrão, é o mesmo que:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2006</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"chaining-filters\">\n<span id=\"id2\"></span><h4>Filtros encadeados<a class=\"heading-anchor\" href=\"#chaining-filters\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>O resultado de um refinamento de uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>  é ela mesma uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>, tal que é possível encadear refinamentos. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;What&#39;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ele pega o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> inicial com todas as entradas do banco de dados, adiciona um filtro, então adiciona uma exclusão, então outro filtro. O resultado final é um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> contendo todas as entradas com uma manchete que comece com “What”, que foi publicada entre 30 de janeiro de 2005 e o dia de hoje.</p>\n</section>\n<section id=\"filtered-querysets-are-unique\">\n<span id=\"id3\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s filtradas são únicas<a class=\"heading-anchor\" href=\"#filtered-querysets-are-unique\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Cada vez que refine um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>, você tem uma nova <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> que não está de forma alguma vinculada ao anterior <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>. Cada refinamento cria uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> separada e distinta que pode ser armazenada, usada e resusada.</p>\n<p>Exemplo</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q1</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q2</span> <span class=\"o\">=</span> <span class=\"n\">q1</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q3</span> <span class=\"o\">=</span> <span class=\"n\">q1</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>Estes três <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySets</span></code> são separados. O primeiro é um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> básico contendo todas as entradas que contenham uma manchete iniciando com “What”. O segundo é um subconjunto do primeiro, com um critério adicional que exclui aqueles cujo o <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> é hoje ou está no futuro. O terceiro é também um subconjunto do primeiro, com um critério adicional que seleciona somente os registros cujo o <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> é hoje ou está no futuro. A <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">q1</span></code>) inicial não é afetado pelo processo de refinamento.</p>\n</section>\n<section id=\"querysets-are-lazy\">\n<span id=\"id4\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s são “lazy”<a class=\"heading-anchor\" href=\"#querysets-are-lazy\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySets</span></code> são preguiçosos (“lazy”) – o ato de criar uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> não envolve nenhuma atividade no banco de dados. Você pode epilhar filtros o dia inteiro, e o Django não irá execuar a conssulta realmente até que a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> seja <em>interpretada</em>. Dê uma olhada neste exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__lte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">body_text__icontains</span><span class=\"o\">=</span><span class=\"s2\">&quot;food&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">q</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Apesar de parece que isso seja três acessos ao banco de dados, de fato ele acessa o banco de dados somente um vez, na última linha (<code class=\"docutils literal notranslate\"><span class=\"pre\">print(q)</span></code>). Em geral, os resultados de uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> não são buscados no banco de dados até que você “peça” por eles. Quando fizer, a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> é <em>interpretada</em> acessando o banco de dados. Para mais detalhes de quando exatamente a interpretação ocorre, veja <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#when-querysets-are-evaluated\"><span class=\"std std-ref\">When QuerySets are evaluated</span></a>.</p>\n</section>\n</section>\n<section id=\"retrieving-a-single-object-with-get\">\n<span id=\"retrieving-single-object-with-get\"></span><h3>Recuperando um único objeto com <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code><a class=\"heading-anchor\" href=\"#retrieving-a-single-object-with-get\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> sempre lhe dará um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>, mesmo se um único objeto combina com a consulta - neste caso, ele será uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> que contém um único elemento.</p>\n<p>Se você sabe que somente um objeto combina com sua consulta, você pode usar o método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a> em uma <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> o qual  retorna o objeto diretamente:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">one_entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Você pode usar qualquer expressão de consulta com <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>, tal como com <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> - denovo, veja o <a class=\"reference internal\" href=\"#field-lookups\">Campos de consulta</a> abaixo.</p>\n<p>Note que existe uma diferença entre usar o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>, e usar o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> com uma fatia de <code class=\"docutils literal notranslate\"><span class=\"pre\">[0]</span></code>. Se não houver resultados que combinem com a consulta, o  <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a> irá emitir uma exceção <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code>. Esta exceção é um atributo da classe de modelo na qual a consulta está sendo realizada - no código acima, se não houver objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> com a chave-primária de 1, o Django irá emitir um <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry.DoesNotExist</span></code>.</p>\n<p>De maneira similar, o Django irá reclamar se mais de um item combinar com a consulta <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>. Neste caso, ele emitirá um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">MultipleObjectsReturned</span></code></a>, o qual denovo é ele próprio um atributo da classe de modelo.</p>\n</section>\n<section id=\"other-queryset-methods\">\n<h3>Outros <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> métodos<a class=\"heading-anchor\" href=\"#other-queryset-methods\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Na maioria das vezes você usará o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">all()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> e o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a> quando precisar buscar objetos no banco de dados. Porém, está longe do todo que existe; veja the a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#queryset-api\"><span class=\"std std-ref\">Refrêcia da API de QuerySet</span></a> para uma lista completa das vários métodos da <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>.</p>\n</section>\n<section id=\"limiting-querysets\">\n<span id=\"id5\"></span><h3>Limitando <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s<a class=\"heading-anchor\" href=\"#limiting-querysets\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Use um subconjunto da syntax de fatias de array Python para limitar seu <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> para um certo número de resultados. Este é o equivalente às cláusulas SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">Limit</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code>.</p>\n<p>Por exemplo, isso retorna os 5 primeiros objetos (<code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span> <span class=\"pre\">5</span></code>):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Este retorna o sexto até o décimo objeto (<code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span> <span class=\"pre\">5</span> <span class=\"pre\">LIMIT</span> <span class=\"pre\">5</span></code>):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"mi\">5</span><span class=\"p\">:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Índice negativo (isto é <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry.objects.all()[-1]</span></code>) não é suportado.</p>\n<p>Em geral, fatiar uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> retorna uma nova <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>  – isso não interpreta a query. Uma exceção é se você usar o parâmetro “step” da syntax de fatias do Python. Por exemplo, isso deve realmente executar a consulta para que retorne uma lista de cada <em>segundo</em> objeto dos primeiros 10:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[:</span><span class=\"mi\">10</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Para retornar um <em>único</em> objeto ao invés de uma lista (ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span> <span class=\"pre\">foo</span> <span class=\"pre\">FROM</span> <span class=\"pre\">bar</span> <span class=\"pre\">LIMIT</span> <span class=\"pre\">1</span></code>),  use um índice simples ao invés de uma fatia. Por exemplo, isso retorna o primeiro <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> do banco de dados, depois de ordenar alfabeticamente pela “headline”:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Isso é, de maneira rudementar,  equivalente a:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;headline&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Note, porém, que o primeiro irá emitir um <code class=\"docutils literal notranslate\"><span class=\"pre\">IndexError</span></code> enquanto o segundo emitirá um <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code> se nenhum objeto combinar com o critério dado. Veja o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a> para mais detalhes.</p>\n</section>\n<section id=\"field-lookups\">\n<span id=\"field-lookups-intro\"></span><h3>Filtros de campo<a class=\"heading-anchor\" href=\"#field-lookups\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Filtros de campo é o que você usa para especiíicar os parâmetros da cláusula <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code>. Eles são especificados como argumentos nomeados para os métodos da  <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>:  <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>.</p>\n<p>Argumentos nomeados para filtros básicos estão no formato <code class=\"docutils literal notranslate\"><span class=\"pre\">field__lookuptype=value</span></code>. (aquilo é um “underscore” duplo). Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__lte</span><span class=\"o\">=</span><span class=\"s1\">&#39;2006-01-01&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Traduzido (groseiramente) no seguinte SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"s1\">&#39;2006-01-01&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<aside class=\"admonition-how-this-is-possible admonition\">\n<p class=\"admonition-title\">Como isso é possível</p>\n<p>Python has the ability to define functions that accept arbitrary name-value\narguments whose names and values are evaluated at runtime. For more\ninformation, see <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/controlflow.html#tut-keywordargs\" title=\"(em Python v3.14)\"><span>Keyword Arguments</span></a> in the official Python tutorial.</p>\n</aside>\n<p>O campo especificado em um filtro tem que ser um nome de campoo do modelo. Existe uma exceção porém, no caso de uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> você pode especificar o nome do campo com um sufixo <code class=\"docutils literal notranslate\"><span class=\"pre\">_id</span></code>. Neste caso, é esperado que o valor do parâmetro contenha literalmente o valor da chave-primária do modelo estrageiro. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog_id</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Se você passar um argumento nomeado inválido, a funçao do filtro irá emitir um <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code>.</p>\n<p>The database API supports about two dozen lookup types; a complete reference\ncan be found in the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">field lookup reference</span></a>. To give you\na taste of what’s available, here’s some of the more common lookups you’ll\nprobably use:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">exact</span></code></a></dt><dd><p>Combinação exata. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__exact</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cat bites dog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Geraria SQL ao longo destas linhas:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;Cat bites dog&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Se você não fornecer um tipo de filtro – isto é, se o seu argumento nomeado não contiver um “underscore” duplo – o tipo de filtro é assumido como sendo <code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code></p>\n<p>Por exemplo, os dois seguintes argumentos são equivalentes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>         <span class=\"c1\"># __exact is implied</span>\n</code></pre></div>\n<p>Isso se dá por conveniência, porque os filtros <code class=\"docutils literal notranslate\"><span class=\"pre\">exact</span></code> são casos comuns.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iexact</span></code></a></dt><dd><p>Uma combinação que ignora a diferença entre caixa-alta e caixa-baixa. Então a consulta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name__iexact</span><span class=\"o\">=</span><span class=\"s2\">&quot;beatles blog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Deveria encontrar um <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> entitulado <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Beatles</span> <span class=\"pre\">Blog&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;beatles</span> <span class=\"pre\">blog&quot;</span></code>, ou mesmo <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;BeAtlES</span> <span class=\"pre\">blOG&quot;</span></code>.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a></dt><dd><p>Teste de contenção sensíveis ao tipo de caixa. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Mais ou menos traduzido para este SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Note que este irá encontrar o “headline” <code class=\"docutils literal notranslate\"><span class=\"pre\">'Today</span> <span class=\"pre\">Lennon</span> <span class=\"pre\">honored'</span></code> mas não o <code class=\"docutils literal notranslate\"><span class=\"pre\">'today</span> <span class=\"pre\">lennon</span> <span class=\"pre\">honored'</span></code>.</p>\n<p>Existe também uma versão que ignora o tipo de caixa, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-startswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">startswith</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-endswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">endswith</span></code></a></dt><dd><p>Busca começa-com e termina-com, respectivamente. Existe também a versão que ignora o tipo de caixa chamada <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">istartswith</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iendswith</span></code></a>.</p>\n</dd>\n</dl>\n<p>Denovo, isso aqui somente arranha a superfície. Uma refrência completa pode ser achada na <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">Referência de filtros de campo</span></a>.</p>\n</section>\n<section id=\"lookups-that-span-relationships\">\n<span id=\"id6\"></span><h3>Filtros que abrangem os relacionamentos<a class=\"heading-anchor\" href=\"#lookups-that-span-relationships\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>O Django oferece uma maneira poderosa e intuitva de “seguir” relacionamento nos filtros, automaticamente cuidando dos <code class=\"docutils literal notranslate\"><span class=\"pre\">JOIN</span></code>s SQL para você, por detrás das cenas. Para abranger um relacionamento, apenas use o nome do campo dos campos relacionados através dos modelos, separados por duplo “underscore”, até chegar ao campo que você quer.</p>\n<p>Este exemplo devolve todos os objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> com um <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> o qual o <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> é <code class=\"docutils literal notranslate\"><span class=\"pre\">'Beatles</span> <span class=\"pre\">Blog'</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Beatles Blog&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>A abrangância pode ser tão profunda quanto queira.</p>\n<p>Isso funciona de trás-pra-frente. Para se referir a um relacionamento “reverso”, apenas use o nome do modelo em mínúsculo.</p>\n<p>Este exemplo retorna todos os objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog``os</span> <span class=\"pre\">quais</span> <span class=\"pre\">tem</span> <span class=\"pre\">pelo</span> <span class=\"pre\">menos</span> <span class=\"pre\">uma</span> <span class=\"pre\">``Entry</span></code> a qual o <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> contém <code class=\"docutils literal notranslate\"><span class=\"pre\">'Lennon'</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Se você estiver filtrando através de múltiplos relacionamentos e um dos modelos intermediários não tiver um valor que vá de encontro com a condição do filtro, o Django irá tratá-lo como se houvesse um objeto vazio (todos os valores são <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>), mas válido. Tudo isso significa que nenhum erro será emitido. Por exemplo, neste filtro:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(se houvesse um modelo <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> relacionado), se não houvesse  <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> associado com uma “entry”, seria tratado como se também não houvesse um <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> anexo, ao invés de emitir um erro por causa do <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> faltante.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>irá retornar objeto do tipo <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> que tenham um <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> vazio no <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> a também aqueles os quais tem um <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> vazio no <code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>.  Se você não que estes últimos objetos, você poderia escrever:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">entry__authors__name__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"spanning-multi-valued-relationships\">\n<h4>Abrangendo relacionamentos multi-interpretados<a class=\"heading-anchor\" href=\"#spanning-multi-valued-relationships\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Quando se está filtrando um objeto baseado em uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>  ou em uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> reversa, existem dois tipos diferentes de filtros que talvez lhe interesse. Considere o relacionamento <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>/<code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>  (<code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> para <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> é uma relação um-para-muitos). Talvez estejamos interessados em encontrar blogs que tenham uma “entry” a qual tenha <em>“Lennon”</em> no “headline” e foi publicado em 2008. Ou talvez queiramos achar blogs que tenham um “entry” com <em>“Lennon”</em> na “headline” como também uma “entry” que foi publicada em 2008. Uma vez que tenhamos múltiplos “entry”s associados com um único <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>, ambas destas consultas são possíveis e fazem sentido em algumas situações.</p>\n<p>O mesmo tipo de situação vêem a tona com uma <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>. Por exemplo, se um <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> tem um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">tags</span></code>, talvez queiramos encontrar “entry”s conectados com “tags” chamada <em>“music”</em> e <em>“bands”</em> ou talvez queiramos uma “entry”que contém uma “tag” com o nome de <em>“music”</em> e status de <em>“public”</em>.</p>\n<p>Para lidar com ambas as situações, o Django tem uma maneira conveniente de processar as chamadas do <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>. Tudo que está dentro de uma única chamada <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> é aplicado simultâneamente para filtrar item de combinem com todos os requerimentos. Chamadas sucessivas de <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> restrigem os conjunto de objetos, mas para relacionamentos com vários valores, eles se aplicam para qualquer objeto conectaco a chamada do primeiro modelo, não necessariamente aqueles objetos que foram selecionada por uma chamada anterior de <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>.</p>\n<p>Isso pode parecer um pouco confuso, então talvez um exemplo irá carificar. Para selecionar todas as “entries” de blogs que contém <em>“Lennon”</em> na manchete e que foram publicadas em 2008 (a mesma entrada satisfaz ambas as condições), nós poderíamos escrever:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">,</span> <span class=\"n\">entry__pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Para selecionar todos os blogs que contenham uma “entry” com <em>“Lennon”</em>  na manchete <strong>assim como</strong> uma “entry” que foi publicada em 2008, podeíamos escrever:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Suponha que exista somente um blog que tenha ambas as “entries” contendo <em>“Lennon”</em>  e “entries” de 2008, mas nenhuma das “entries” de 2008 contém <em>“Lennon”</em>. A primeira consulta não irá retornar qualquer blog, mas a segunda consulta irá retornar aquele blog.</p>\n<p>No segundo exemplo, o primeiro filtro restringe a consulta a todos aqueles blogs ligados a “entries” com <em>“Lennon”</em>  na manchete. O Segundo filtro restringe o conjunto de blogs <em>e ainda</em> aqueles que também são ligados a entradas que foram publicadas em 2008. As “entries” selecionadas por um segundo filtro talvez tehha ou não tenha as mesmas “entries” do primeiro filtro. Estamos filtrando os items <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> com cada comando de filtro, não os items <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>O comportamento do <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> para consultas que abrangem relacionamentos com valores múltiplos, como descrito acima, não é implementado de maneira equivalente no <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a>. Ao invés, as condições em uma única chamada <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a> não necessariamente irão se referenciar ao mesmo item.</p>\n<p>Por exemplo, a seguinte consulta excluiria blogs que contém <em>ambas</em> “entries” com <em>“Lennon”</em>  na manchete <em>e</em> “entries” publicadas em 2008:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n    <span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">entry__pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Contudo, diferente do comportamento quando usado o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>, este não limitará blogs baseados em “entries” que satisfaçam ambas as condições. Para tal, isto é, para selecionar todos os blogs que não contenham “entries” publicadas com <em>“Lennon”</em> que foram publicadas em 2008, você precisa fazer duas consultas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n    <span class=\"n\">entry__in</span><span class=\"o\">=</span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n</section>\n<section id=\"filters-can-reference-fields-on-the-model\">\n<span id=\"using-f-expressions-in-filters\"></span><h3>Filtros podem referenciar campos do modelo<a class=\"heading-anchor\" href=\"#filters-can-reference-fields-on-the-model\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nos exemplos dados até agora, construímos filtros que comparam o valor de um campo de modelo com uma constante. Mas e se você quiser comparar o valor de um modelo com outro campo no mesmo modelo?</p>\n<p>O Django fornece a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">F</span> <span class=\"pre\">expressions</span></code></a> para permitir tais comparações. Instâncias de <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> atuam como uma referência a um campo de modelo dentro de uma consulta. Essas referências podem então ser comparadas a valores de dois diferentes campos na mesma instância de modelo.</p>\n<p>Por exemplo, para encontrar uma lista de todas “entries” que tenham mais comentários que “pingbacks”, construimos um objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> para referenciar o contados de “pingback”, e usar o objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> na consulta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">n_comments__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;n_pingbacks&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>O Django suporta o uso de adição, subtração, multiplicação, divisão, módulo, e aritmética poderosa com objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>, ambos com constantes e com outros objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>. Para encontrar todos os “entries” de blogs com <em>das vezes</em> mais comentários do que “pingbacks”, modificamos a consulta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">n_comments__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;n_pingbacks&#39;</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Para encontrar as “entries” onde a taxa de “entry” é menor que a soma da contagem de “pingback” e contagem de comentários, poderíamos fazer a consulta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">rating__lt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;n_comments&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;n_pingbacks&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Podemos também usar a anotação do duplo “underscore” para abranger relacionamento em um objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>. Um objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> com duplo “underscore” introduzirá qualquer “join” necessária para acessar objetos relacionados. Por exemplo, para receber todas as “entries” onde o nome do autor é o mesmo que o nome do blog, nós poderíamos fazer a consulta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;blog__name&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Para data e campos “date/time”, você pode adicionar ou subtrair um objeto do tipo <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(em Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">timedelta</span></code></a> object. A consulta seguinte retornaria todas as entradas que foram modificadas mais de 3 dias depois que foram publicadas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timedelta</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">mod_date__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;pub_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Os objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> suportam operações bit a bit através do <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitand()</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitor()</span></code>, por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;somefield&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">bitand</span><span class=\"p\">(</span><span class=\"mi\">16</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"the-pk-lookup-shortcut\">\n<h3>O atalho de filtro <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code><a class=\"heading-anchor\" href=\"#the-pk-lookup-shortcut\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Por conveniência, o Django fornece um atalho para o filtro <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code>, o que representa a “chave-primária”.</p>\n<p>No modelo <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> de exemplo model, a chave-primária é o campo ìd`, de modo que estes três exemplos são equivalentes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span> <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span> <span class=\"c1\"># __exact is implied</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span> <span class=\"c1\"># pk implies id__exact</span>\n</code></pre></div>\n<p>O uso da <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> não está limitado a consultas <code class=\"docutils literal notranslate\"><span class=\"pre\">__exact</span></code> – qualquer termo de consulta pode ser combinado com <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> para realizar uma consulta com a chave-primária de um modelo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Get blogs entries with id 1, 4 and 7</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk__in</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">])</span>\n\n<span class=\"c1\"># Get all blog entries with id &gt; 14</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk__gt</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>O filtro <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> também funciona através de “joins”. Por exemplo, estes três comandos são equivalentes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__id__exact</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>        <span class=\"c1\"># __exact is implied</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__pk</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>        <span class=\"c1\"># __pk implies __id__exact</span>\n</code></pre></div>\n</section>\n<section id=\"escaping-percent-signs-and-underscores-in-like-statements\">\n<h3>Substituição de sinais de porcentagem e “underscores” nos comandos <code class=\"docutils literal notranslate\"><span class=\"pre\">Like</span></code><a class=\"heading-anchor\" href=\"#escaping-percent-signs-and-underscores-in-like-statements\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Os campos filtros que equivalem ao comando SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">iexact</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">icontains</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">startswith</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">istartswith</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">endswith</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">iendswith</span></code>) irão automaticamente substituir os dois caracteres especiais usados em comandos <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code> – o sinal de porcentagem e o “underscore”.  (Em um comando <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code>, o sinal de porcentagem significa múltiplos-caracteres curingas e o “underscore” siginifica um único caracter curinga.)</p>\n<p>Isso significa que as coisas funcionam intuitivamente, de modo que a abstração não atrapalha. Por exemplo, para retornar todas as entradas que contenham um sinal de porcentagem, apenas use o sinal de porcentagem como qualquer outro caracter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;%&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>O Django irá cuidar da citação por você; o SQL resultante se parecerá com algo como:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;%\\%%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>O mesmo vale para os “underscores”. Ambos os sinais, porcentagem e “underscores”, são manipulados para você de maneira transparente.</p>\n</section>\n<section id=\"caching-and-querysets\">\n<span id=\"id7\"></span><h3>“Cache”  e <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySets</span></code>s<a class=\"heading-anchor\" href=\"#caching-and-querysets\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cada <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> contém um “cache” para minimizar o acesso ao banco de dados. Entendendo como isso funciona lhe permitirá escrever código mais eficiente.</p>\n<p>Em uma classe <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> que acaba de ser criada, o “cache” está vazio. A primeira vez que a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> é interpretada – e portanto, uma consulta ao banco acontece – o Django salva o resultado da consulta no  “cache” da <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>’s e retorna o resultado que foi requerido explicitamente (exemplo, o próximo elemento, se o <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> está sendo iterado). Execuçãoes subsequentes do <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> reusam os resultados que estão no “cache”.</p>\n<p>Mantenha este comportamento do cache em mente, porque ele pode te pegar se você não usar seu <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>s de maneira correta. Por exemplo irá criar dois <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>s, interpretá-los, e jogá-los fora.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">pub_date</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n</code></pre></div>\n<p>Isso significa que a mesma consulta de banco de dados será executada duas vezes, efetivamente dobrando a carga no banco de dados. Também existe a posibilidade das duas listas não incluírem os mesmos registros de banco de dados, porque uma <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> talvez tenha sido adicionada ou deletada durante a fração de segundo entre as duas requisições.</p>\n<p>Para evitar este problema, simplesmente salve a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> e reuse-a:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">])</span> <span class=\"c1\"># Evaluate the query set.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">pub_date</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">])</span> <span class=\"c1\"># Re-use the cache from the evaluation.</span>\n</code></pre></div>\n<section id=\"when-querysets-are-not-cached\">\n<h4>Quando <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s não são armazenados no “cache”<a class=\"heading-anchor\" href=\"#when-querysets-are-not-cached\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Resultados de consultas nem sempre são salvas no “cache”. Quando interpretar somente <em>parte</em>  da consulta, o “cache” é veririficado, mas se ele não estiver populado então os itens retornados pela consulta subsequente não vão para o “cache”. Especificamente, isso significa que <a class=\"reference internal\" href=\"#limiting-querysets\"><span class=\"std std-ref\">limitar consultas</span></a> usando o fatiamento de “array” ou um índice não irá popular o cache.</p>\n<p>Por exemplo, pegar um certo índice em um objeto “queryset” repetidamente irá consultar o banco de dados todas as vezes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"c1\"># Queries the database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"c1\"># Queries the database again</span>\n</code></pre></div>\n<p>Porém, se todo o queryset foi interpretado, então o “cache” será verificado:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"n\">entry</span> <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">]</span> <span class=\"c1\"># Queries the database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"c1\"># Uses cache</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"c1\"># Uses cache</span>\n</code></pre></div>\n<p>Aqui estão alguns exemplos de outras ações que irão resultar na interpretação de toda  a consulta e portanto populam o “cache”:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"n\">entry</span> <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">bool</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Simplesmente dar um “print” no “queryset” não popula o “cache”. Isso é porque a chamada do <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>__repr__()``somente retorna uma fatia de todo o “queryset”.</p>\n</aside>\n</section>\n</section>\n</section>\n<section id=\"complex-lookups-with-q-objects\">\n<span id=\"complex-lookups-with-q\"></span><h2>Consultas complexas com objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code><a class=\"heading-anchor\" href=\"#complex-lookups-with-q-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Consultas com argumentos nomeados – no <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>, etc. – compõem uma “E”. Se você precisa executar consultas mais complexas (por exemplo, consultas com comandos <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code>), você pode usar <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span> <span class=\"pre\">objects</span></code></a>.</p>\n<p>Um <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">objeto</span> <span class=\"pre\">Q</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.Q</span></code>) é um objeto usado para encapsular uma coleção de argumentos nomeados. Estes argumentos são especificados como um “campo de filtro” acima.</p>\n<p>Por exemplo, este objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> encapsula uma única consulta <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n<span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;What&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> podem ser combinados usando os operadores <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>. Quando um operador é usado com dois objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>, ele produz um novo objeto <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Q`.</p>\n<p>Por exemplo, este comando produz um único objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> que representa o <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> de duas consultas <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;question__startswith&quot;</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;Who&#39;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;What&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Isso é o equivalente as seguintes cláusulas SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">WHERE</span> <span class=\"n\">question</span> <span class=\"n\">LIKE</span> <span class=\"s1\">&#39;Who%&#39;</span> <span class=\"n\">OR</span> <span class=\"n\">question</span> <span class=\"n\">LIKE</span> <span class=\"s1\">&#39;What%&#39;</span>\n</code></pre></div>\n<p>Você pode compor comandos de uma complexidade arbitrária combinando objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> com os operadores <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> e usar o agrupamento entre parêntesis. Os objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> podem também ser negados usando o operador <code class=\"docutils literal notranslate\"><span class=\"pre\">~</span></code>, possbilitando combinar filtros que combinem uma consulta normal e um consulta de negação (<code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span></code>):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;Who&#39;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"o\">~</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Para cada função de filtro que recebe argumentos nominados (ex.: <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>) pode também se passado um ou mais objetos <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Q``como argumentos posicionais (not-named). Se você prover múltiplos objetos <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>Q``para uma função filtro, os argumentos serão interpolados com lógicas “E”. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;Who&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">))</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>…  grosseiramente traduzido para o SQL:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">SELECT</span> <span class=\"o\">*</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">polls</span> <span class=\"n\">WHERE</span> <span class=\"n\">question</span> <span class=\"n\">LIKE</span> <span class=\"s1\">&#39;Who%&#39;</span>\n    <span class=\"n\">AND</span> <span class=\"p\">(</span><span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;2005-05-02&#39;</span> <span class=\"n\">OR</span> <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;2005-05-06&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Funções de filtro podem misturar o uso de objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> e argumentos nomeados. Todos os argumentos fornecidos para uma função filtro (sejam eles argumentos nomeados ou objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>)  são interpolados com “E”. Porém, se um objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code> é fornecido, é necessário que este preceda qualquer argumento nomeado. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)),</span>\n    <span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;Who&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>… seria uma consulta válida, equivalente ao exemplo anterior; mas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># INVALID QUERY</span>\n<span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s1\">&#39;Who&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">))</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>… não seria válido.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Os <a class=\"reference external\" href=\"https://github.com/django/django/blob/master/tests/or_lookups/tests.py\">OR lookups examples</a> nos testes unitários do Django mostram alguns usos possíveis de  <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>.</p>\n</aside>\n</section>\n<section id=\"comparing-objects\">\n<h2>Comparando objetos<a class=\"heading-anchor\" href=\"#comparing-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Para comparar duas instâncias de modelos, apenas use o operador Pyhon padrão, o sinal duplo de igual: <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code>. Por de trás das cenas, compara os valores das chave-primárias dos dois modelos.</p>\n<p>Usando o exemplo <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> acima, os comandos seguintes são equivalentes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_entry</span> <span class=\"o\">==</span> <span class=\"n\">other_entry</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_entry</span><span class=\"o\">.</span><span class=\"n\">id</span> <span class=\"o\">==</span> <span class=\"n\">other_entry</span><span class=\"o\">.</span><span class=\"n\">id</span>\n</code></pre></div>\n<p>Se a chave-primária de um modelo não é chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>, não tem problema. Comparações sempre irão usar a chave-primária, não importa como é chamada. Por exemplo, se a chave-primária de um modelo é chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>, estes dois comandos são equivalentes:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_obj</span> <span class=\"o\">==</span> <span class=\"n\">other_obj</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_obj</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"n\">other_obj</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n</section>\n<section id=\"deleting-objects\">\n<span id=\"topics-db-queries-delete\"></span><h2>Deletando objetos<a class=\"heading-anchor\" href=\"#deleting-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>O método de deleção, é convenientemente chamado <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>. Este método deleta imediatamente os objetos e retorna o número de objetos deletados e um dicionário com o número de deleções por tipo de objeto. Exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(1, {&#39;weblog.Entry&#39;: 1})</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"1.9\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>O valor retornado descrevendo o número de objetos deletados foi adicionado.</p>\n</aside>\n<p>Você também pode deletar objetos em massa. Cada <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> tem um método <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>, o qual deleta todos os membros daquele <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>.</p>\n<p>Por exemplo, esse deleta todas os objetos <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> com o ano do <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code> igual 2005:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(5, {&#39;webapp.Entry&#39;: 5})</span>\n</code></pre></div>\n<p>Keep in mind that this will, whenever possible, be executed purely in SQL, and\nso the <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> methods of individual object instances will not necessarily\nbe called during the process. If you’ve provided a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> method\non a model class and want to ensure that it is called, you will need to\n“manually” delete instances of that model (e.g., by iterating over a\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> and calling <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> on each\nobject individually) rather than using the bulk\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> method of a\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.9\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>O valor retornado descrevendo o número de objetos deletados foi adicionado.</p>\n</aside>\n<p>When Django deletes an object, by default it emulates the behavior of the SQL\nconstraint <code class=\"docutils literal notranslate\"><span class=\"pre\">ON</span> <span class=\"pre\">DELETE</span> <span class=\"pre\">CASCADE</span></code> – in other words, any objects which had\nforeign keys pointing at the object to be deleted will be deleted along with\nit. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\"># This will delete the Blog and all of its Entry objects.</span>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>This cascade behavior is customizable via the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">on_delete</span></code></a> argument to the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>.</p>\n<p>Note that <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> is the only\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> method that is not exposed on a\n<a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> itself. This is a safety mechanism to\nprevent you from accidentally requesting <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry.objects.delete()</span></code>, and\ndeleting <em>all</em> the entries. If you <em>do</em> want to delete all the objects, then\nyou have to explicitly request a complete query set:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"copying-model-instances\">\n<span id=\"topics-db-queries-copy\"></span><h2>Copiando as instâncias de modelo<a class=\"heading-anchor\" href=\"#copying-model-instances\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Although there is no built-in method for copying model instances, it is\npossible to easily create new instance with all fields’ values copied. In the\nsimplest case, you can just set <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Using our blog example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;My blog&#39;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Blogging is easy&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span> <span class=\"c1\"># blog.pk == 1</span>\n\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span> <span class=\"c1\"># blog.pk == 2</span>\n</code></pre></div>\n<p>Things get more complicated if you use inheritance. Consider a subclass of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ThemeBlog</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"p\">):</span>\n    <span class=\"n\">theme</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n<span class=\"n\">django_blog</span> <span class=\"o\">=</span> <span class=\"n\">ThemeBlog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Django&#39;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Django is easy&#39;</span><span class=\"p\">,</span> <span class=\"n\">theme</span><span class=\"o\">=</span><span class=\"s1\">&#39;python&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span> <span class=\"c1\"># django_blog.pk == 3</span>\n</code></pre></div>\n<p>Due to how inheritance works, you have to set both <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> to None:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">id</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span> <span class=\"c1\"># django_blog.pk == 4</span>\n</code></pre></div>\n<p>This process doesn’t copy relations that aren’t part of the model’s database\ntable. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> has a <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>. After\nduplicating an entry, you must set the many-to-many relations for the new\nentry:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"c1\"># some previous entry</span>\n<span class=\"n\">old_authors</span> <span class=\"o\">=</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">(</span><span class=\"n\">old_authors</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For a <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>, you must duplicate the related object and assign it\nto the new object’s field to avoid violating the one-to-one unique constraint.\nFor example, assuming <code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code> is already duplicated as above:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">detail</span> <span class=\"o\">=</span> <span class=\"n\">EntryDetail</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">entry</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"updating-multiple-objects-at-once\">\n<span id=\"topics-db-queries-update\"></span><h2>Alterando múltiplos objetos de uma só vez.<a class=\"heading-anchor\" href=\"#updating-multiple-objects-at-once\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Algumas vezes você querer definir um campo para um particular valor para todos os objetos em uma <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">:classe:`~django.db.models.query.QuerySet`</span></a>. Você pode fazer isto com o <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">:método:`~django.db.models.query.QuerySet.update`</span></a> método. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Update all the headlines with pub_date in 2007.</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2007</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Everything is the same&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>You can only set non-relation fields and <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>\nfields using this method. To update a non-relation field, provide the new value\nas a constant. To update <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> fields, set the\nnew value to be the new model instance you want to point to. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Change every Entry so that it belongs to this Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> method is applied instantly and returns the number of rows\nmatched by the query (which may not be equal to the number of rows updated if\nsome rows already have the new value). The only restriction on the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> being updated is that it can only\naccess one database table: the model’s main table. You can filter based on\nrelated fields, but you can only update columns in the model’s main\ntable. Example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Update all the headlines belonging to this Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s1\">&#39;Everything is the same&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Be aware that the <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> method is converted directly to an SQL\nstatement. It is a bulk operation for direct updates. It doesn’t run any\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> methods on your models, or emit the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">pre_save</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">post_save</span></code> signals (which are a consequence of calling\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>), or honor the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.DateField.auto_now\" title=\"django.db.models.DateField.auto_now\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">auto_now</span></code></a> field option.\nIf you want to save every item in a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>\nand make sure that the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> method is called on\neach instance, you don’t need any special function to handle that. Just loop\nover them and call <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">my_queryset</span><span class=\"p\">:</span>\n    <span class=\"n\">item</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Calls to update can also use <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">F</span> <span class=\"pre\">expressions</span></code></a> to\nupdate one field based on the value of another field in the model. This is\nespecially useful for incrementing counters based upon their current value. For\nexample, to increment the pingback count for every entry in the blog:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">n_pingbacks</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;n_pingbacks&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>However, unlike <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> objects in filter and exclude clauses, you can’t\nintroduce joins when you use <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> objects in an update – you can only\nreference fields local to the model being updated. If you attempt to introduce\na join with an <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> object, a <code class=\"docutils literal notranslate\"><span class=\"pre\">FieldError</span></code> will be raised:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># This will raise a FieldError</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;blog__name&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"related-objects\">\n<span id=\"topics-db-queries-related\"></span><h2>Objetos relacionados<a class=\"heading-anchor\" href=\"#related-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When you define a relationship in a model (i.e., a\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>,\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a>, or\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>), instances of that model will have\na convenient API to access the related object(s).</p>\n<p>Using the models at the top of this page, for example, an <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> object <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code>\ncan get its associated <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> object by accessing the <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> attribute:\n<code class=\"docutils literal notranslate\"><span class=\"pre\">e.blog</span></code>.</p>\n<p>(Behind the scenes, this functionality is implemented by Python <a class=\"reference external\" href=\"http://users.rcn.com/python/download/Descriptor.htm\">descriptors</a>.\nThis shouldn’t really matter to you, but we point it out here for the curious.)</p>\n<p>Django also creates API accessors for the “other” side of the relationship –\nthe link from the related model to the model that defines the relationship.\nFor example, a <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> object <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> has access to a list of all related\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> objects via the <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></code> attribute: <code class=\"docutils literal notranslate\"><span class=\"pre\">b.entry_set.all()</span></code>.</p>\n<p>All examples in this section use the sample <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>\nmodels defined at the top of this page.</p>\n<section id=\"one-to-many-relationships\">\n<h3>Relações One-to-many<a class=\"heading-anchor\" href=\"#one-to-many-relationships\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"forward\">\n<h4>Adiante<a class=\"heading-anchor\" href=\"#forward\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>If a model has a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>, instances of that model\nwill have access to the related (foreign) object via a simple attribute of the\nmodel.</p>\n<p>Exemplo</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"c1\"># Returns the related Blog object.</span>\n</code></pre></div>\n<p>You can get and set via a foreign-key attribute. As you may expect, changes to\nthe foreign key aren’t saved to the database until you call\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>. Example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">some_blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>If a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> field has <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> set (i.e.,\nit allows <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> values), you can assign <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> to remove the relation.\nExample:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span> <span class=\"c1\"># &quot;UPDATE blog_entry SET blog_id = NULL ...;&quot;</span>\n</code></pre></div>\n<p>Forward access to one-to-many relationships is cached the first time the\nrelated object is accessed. Subsequent accesses to the foreign key on the same\nobject instance are cached. Example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"p\">)</span>  <span class=\"c1\"># Hits the database to retrieve the associated Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n</code></pre></div>\n<p>Note that the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a>\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> method recursively prepopulates the\ncache of all one-to-many relationships ahead of time. Example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n</code></pre></div>\n</section>\n<section id=\"following-relationships-backward\">\n<span id=\"backwards-related-objects\"></span><h4>Following relationships “backward”<a class=\"heading-anchor\" href=\"#following-relationships-backward\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>If a model has a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>, instances of the\nforeign-key model will have access to a <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> that\nreturns all instances of the first model. By default, this\n<a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> is named <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO_set</span></code>, where <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO</span></code> is the\nsource model name, lowercased. This <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> returns\n<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySets</span></code>, which can be filtered and manipulated as described in the\n“Retrieving objects” section above.</p>\n<p>Exemplo</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span> <span class=\"c1\"># Returns all Entry objects related to Blog.</span>\n\n<span class=\"go\"># b.entry_set is a Manager that returns QuerySets.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>You can override the <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO_set</span></code> name by setting the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_name</span></code></a> parameter in the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> definition. For example, if the <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>\nmodel was altered to <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span> <span class=\"pre\">=</span> <span class=\"pre\">ForeignKey(Blog,</span> <span class=\"pre\">on_delete=models.CASCADE,</span>\n<span class=\"pre\">related_name='entries')</span></code>, the above example code would look like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span> <span class=\"c1\"># Returns all Entry objects related to Blog.</span>\n\n<span class=\"go\"># b.entries is a Manager that returns QuerySets.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Lennon&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"using-a-custom-reverse-manager\">\n<span id=\"using-custom-reverse-manager\"></span><h4>Using a custom reverse manager<a class=\"heading-anchor\" href=\"#using-a-custom-reverse-manager\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>By default the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager\" title=\"django.db.models.fields.related.RelatedManager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RelatedManager</span></code></a> used\nfor reverse relations is a subclass of the <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#manager-names\"><span class=\"std std-ref\">default manager</span></a>\nfor that model. If you would like to specify a different manager for a given\nquery you can use the following syntax:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\">#...</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">()</span>  <span class=\"c1\"># Default Manager</span>\n    <span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">EntryManager</span><span class=\"p\">()</span>    <span class=\"c1\"># Custom Manager</span>\n\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"p\">(</span><span class=\"n\">manager</span><span class=\"o\">=</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">EntryManager</span></code> performed default filtering in its <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code>\nmethod, that filtering would apply to the <code class=\"docutils literal notranslate\"><span class=\"pre\">all()</span></code> call.</p>\n<p>Of course, specifying a custom reverse manager also enables you to call its\ncustom methods:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"p\">(</span><span class=\"n\">manager</span><span class=\"o\">=</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">is_published</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"additional-methods-to-handle-related-objects\">\n<h4>Additional methods to handle related objects<a class=\"heading-anchor\" href=\"#additional-methods-to-handle-related-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>In addition to the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> methods defined in\n“Retrieving objects” above, the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>\n<a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> has additional methods used to handle the\nset of related objects. A synopsis of each is below, and complete details can\nbe found in the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/relations/\"><span class=\"doc\">related objects reference</span></a>.</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">add(obj1,</span> <span class=\"pre\">obj2,</span> <span class=\"pre\">...)</span></code></dt><dd><p>Adds the specified model objects to the related object set.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">create(**kwargs)</span></code></dt><dd><p>Creates a new object, saves it and puts it in the related object set.\nReturns the newly created object.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">remove(obj1,</span> <span class=\"pre\">obj2,</span> <span class=\"pre\">...)</span></code></dt><dd><p>Removes the specified model objects from the related object set.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code></dt><dd><p>Removes all objects from the related object set.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">set(objs)</span></code></dt><dd><p>Replace the set of related objects.</p>\n</dd>\n</dl>\n<p>To assign the members of a related set, use the <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code> method with an\niterable of object instances or a list of primary key values. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">([</span><span class=\"n\">e1</span><span class=\"p\">,</span> <span class=\"n\">e2</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>In this example, <code class=\"docutils literal notranslate\"><span class=\"pre\">e1</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">e2</span></code> can be full Entry instances, or integer\nprimary key values.</p>\n<p>If the <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> method is available, any pre-existing objects will be\nremoved from the <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></code> before all objects in the iterable (in this\ncase, a list) are added to the set. If the <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> method is <em>not</em>\navailable, all objects in the iterable will be added without removing any\nexisting elements.</p>\n<p>Each “reverse” operation described in this section has an immediate effect on\nthe database. Every addition, creation and deletion is immediately and\nautomatically saved to the database.</p>\n</section>\n</section>\n<section id=\"many-to-many-relationships\">\n<span id=\"m2m-reverse-relationships\"></span><h3>Many-to-many relationships<a class=\"heading-anchor\" href=\"#many-to-many-relationships\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Both ends of a many-to-many relationship get automatic API access to the other\nend. The API works just as a “backward” one-to-many relationship, above.</p>\n<p>The only difference is in the attribute naming: The model that defines the\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> uses the attribute name of that\nfield itself, whereas the “reverse” model uses the lowercased model name of the\noriginal model, plus <code class=\"docutils literal notranslate\"><span class=\"pre\">'_set'</span></code> (just like reverse one-to-many relationships).</p>\n<p>An example makes this easier to understand:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span> <span class=\"c1\"># Returns all Author objects for this Entry.</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;John&#39;</span><span class=\"p\">)</span>\n\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span> <span class=\"c1\"># Returns all Entry objects for this Author.</span>\n</code></pre></div>\n<p>Like <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>,\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> can specify\n<a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField.related_name\" title=\"django.db.models.ManyToManyField.related_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_name</span></code></a>. In the above example,\nif the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> in <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> had specified\n<code class=\"docutils literal notranslate\"><span class=\"pre\">related_name='entries'</span></code>, then each <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> instance would have an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">entries</span></code> attribute instead of <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></code>.</p>\n</section>\n<section id=\"one-to-one-relationships\">\n<h3>One-to-one relationships<a class=\"heading-anchor\" href=\"#one-to-one-relationships\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>One-to-one relationships are very similar to many-to-one relationships. If you\ndefine a <a class=\"reference internal\" href=\"/pt-br/1.10/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a> on your model, instances of\nthat model will have access to the related object via a simple attribute of the\nmodel.</p>\n<p>Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EntryDetail</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">Entry</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">details</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n<span class=\"n\">ed</span> <span class=\"o\">=</span> <span class=\"n\">EntryDetail</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">ed</span><span class=\"o\">.</span><span class=\"n\">entry</span> <span class=\"c1\"># Returns the related Entry object.</span>\n</code></pre></div>\n<p>The difference comes in “reverse” queries. The related model in a one-to-one\nrelationship also has access to a <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> object, but\nthat <a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> represents a single object, rather than\na collection of objects:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">entrydetail</span> <span class=\"c1\"># returns the related EntryDetail object</span>\n</code></pre></div>\n<p>If no object has been assigned to this relationship, Django will raise\na <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code> exception.</p>\n<p>Instances can be assigned to the reverse relationship in the same way as\nyou would assign the forward relationship:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">entrydetail</span> <span class=\"o\">=</span> <span class=\"n\">ed</span>\n</code></pre></div>\n</section>\n<section id=\"how-are-the-backward-relationships-possible\">\n<h3>How are the backward relationships possible?<a class=\"heading-anchor\" href=\"#how-are-the-backward-relationships-possible\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Other object-relational mappers require you to define relationships on both\nsides. The Django developers believe this is a violation of the DRY (Don’t\nRepeat Yourself) principle, so Django only requires you to define the\nrelationship on one end.</p>\n<p>But how is this possible, given that a model class doesn’t know which other\nmodel classes are related to it until those other model classes are loaded?</p>\n<p>The answer lies in the <a class=\"reference internal\" href=\"/pt-br/1.10/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">app</span> <span class=\"pre\">registry</span></code></a>. When Django\nstarts, it imports each application listed in <a class=\"reference internal\" href=\"/pt-br/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, and\nthen the <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> module inside each application. Whenever a new model class\nis created, Django adds backward-relationships to any related models. If the\nrelated models haven’t been imported yet, Django keeps tracks of the\nrelationships and adds them when the related models eventually are imported.</p>\n<p>For this reason, it’s particularly important that all the models you’re using\nbe defined in applications listed in <a class=\"reference internal\" href=\"/pt-br/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. Otherwise,\nbackwards relations may not work properly.</p>\n</section>\n<section id=\"queries-over-related-objects\">\n<h3>Queries over related objects<a class=\"heading-anchor\" href=\"#queries-over-related-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Queries involving related objects follow the same rules as queries involving\nnormal value fields. When specifying the value for a query to match, you may\nuse either an object instance itself, or the primary key value for the object.</p>\n<p>For example, if you have a Blog object <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> with <code class=\"docutils literal notranslate\"><span class=\"pre\">id=5</span></code>, the following\nthree queries would be identical:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"c1\"># Query using object instance</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span> <span class=\"c1\"># Query using id from instance</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"c1\"># Query using id directly</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"falling-back-to-raw-sql\">\n<h2>Falling back to raw SQL<a class=\"heading-anchor\" href=\"#falling-back-to-raw-sql\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If you find yourself needing to write an SQL query that is too complex for\nDjango’s database-mapper to handle, you can fall back on writing SQL by hand.\nDjango has a couple of options for writing raw SQL queries; see\n<a class=\"reference internal\" href=\"/pt-br/1.10/topics/db/sql/\"><span class=\"doc\">Performing raw SQL queries</span></a>.</p>\n<p>Finally, it’s important to note that the Django database layer is merely an\ninterface to your database. You can access your database via other tools,\nprogramming languages or database frameworks; there’s nothing Django-specific\nabout your database.</p>\n</section>","rootId":"making-queries","toc":[{"title":"Criando objetos","anchor":"creating-objects","children":[]},{"title":"Salvando alterações para objetos","anchor":"saving-changes-to-objects","children":[{"title":"Salvando campos ForeignKey e ManyToManyField","anchor":"saving-foreignkey-and-manytomanyfield-fields","children":[]}]},{"title":"Recuperando objetos","anchor":"retrieving-objects","children":[{"title":"Recuperando todos os objetos","anchor":"retrieving-all-objects","children":[]},{"title":"Recuperando objetos específicos com filtros.","anchor":"retrieving-specific-objects-with-filters","children":[{"title":"Filtros encadeados","anchor":"chaining-filters","children":[]},{"title":"QuerySets filtradas são únicas","anchor":"filtered-querysets-are-unique","children":[]},{"title":"QuerySets são “lazy”","anchor":"querysets-are-lazy","children":[]}]},{"title":"Recuperando um único objeto com get()","anchor":"retrieving-a-single-object-with-get","children":[]},{"title":"Outros QuerySet métodos","anchor":"other-queryset-methods","children":[]},{"title":"Limitando QuerySets","anchor":"limiting-querysets","children":[]},{"title":"Filtros de campo","anchor":"field-lookups","children":[]},{"title":"Filtros que abrangem os relacionamentos","anchor":"lookups-that-span-relationships","children":[{"title":"Abrangendo relacionamentos multi-interpretados","anchor":"spanning-multi-valued-relationships","children":[]}]},{"title":"Filtros podem referenciar campos do modelo","anchor":"filters-can-reference-fields-on-the-model","children":[]},{"title":"O atalho de filtro pk","anchor":"the-pk-lookup-shortcut","children":[]},{"title":"Substituição de sinais de porcentagem e “underscores” nos comandos Like","anchor":"escaping-percent-signs-and-underscores-in-like-statements","children":[]},{"title":"“Cache”  e QuerySetss","anchor":"caching-and-querysets","children":[{"title":"Quando QuerySets não são armazenados no “cache”","anchor":"when-querysets-are-not-cached","children":[]}]}]},{"title":"Consultas complexas com objetos Q","anchor":"complex-lookups-with-q-objects","children":[]},{"title":"Comparando objetos","anchor":"comparing-objects","children":[]},{"title":"Deletando objetos","anchor":"deleting-objects","children":[]},{"title":"Copiando as instâncias de modelo","anchor":"copying-model-instances","children":[]},{"title":"Alterando múltiplos objetos de uma só vez.","anchor":"updating-multiple-objects-at-once","children":[]},{"title":"Objetos relacionados","anchor":"related-objects","children":[{"title":"Relações One-to-many","anchor":"one-to-many-relationships","children":[{"title":"Adiante","anchor":"forward","children":[]},{"title":"Following relationships “backward”","anchor":"following-relationships-backward","children":[]},{"title":"Using a custom reverse manager","anchor":"using-a-custom-reverse-manager","children":[]},{"title":"Additional methods to handle related objects","anchor":"additional-methods-to-handle-related-objects","children":[]}]},{"title":"Many-to-many relationships","anchor":"many-to-many-relationships","children":[]},{"title":"One-to-one relationships","anchor":"one-to-one-relationships","children":[]},{"title":"How are the backward relationships possible?","anchor":"how-are-the-backward-relationships-possible","children":[]},{"title":"Queries over related objects","anchor":"queries-over-related-objects","children":[]}]},{"title":"Falling back to raw SQL","anchor":"falling-back-to-raw-sql","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/1.10/topics/"},{"docname":"topics/db/index","title":"Modelos e bancos de dados","url":"/pt-br/1.10/topics/db/"}],"prev":{"docname":"topics/db/models","title":"Models","url":"/pt-br/1.10/topics/db/models/"},"next":{"docname":"topics/db/aggregation","title":"Aggregation","url":"/pt-br/1.10/topics/db/aggregation/"},"formats":{"html":"/pt-br/1.10/topics/db/queries/","markdown":"/pt-br/1.10/topics/db/queries.md","json":"/pt-br/1.10/topics/db/queries.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/topics/db/queries.txt","official":"https://docs.djangoproject.com/pt-br/1.10/topics/db/queries/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}