{"title":"Model _meta API","version":"1.9","locale":"pt-br","docname":"ref/models/meta","url":"/pt-br/1.9/ref/models/meta/","canonical":"https://djangodocs.dev/pt-br/1.9/ref/models/meta/","summary":"class Options Link para esta definição # The model _meta API is at the core of the Django ORM. It enables other parts of the system such as lookups, queries, forms,…","html":"<span id=\"model-meta-api\"></span><h1>Model <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta</span></code> API<a class=\"heading-anchor\" href=\"#module-django.db.models.options\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Options</span></span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The model <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta</span></code> API is at the core of the Django ORM. It enables other\nparts of the system such as lookups, queries, forms, and the admin to\nunderstand the capabilities of each model. The API is accessible through\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta</span></code> attribute of each model class, which is an instance of an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.options.Options</span></code> object.</p>\n<p>Methods that it provides can be used to:</p>\n<ul class=\"simple\">\n<li><p>Retrieve all field instances of a model</p></li>\n<li><p>Retrieve a single field instance of a model by name</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"1.8\">\n<p class=\"version-note-title\">Changed in Django 1.8</p><p>The Model <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta</span></code> API has always existed as a Django internal, but\nwasn’t formally documented and supported. As part of the effort to\nmake this API public, some of the already existing API entry points\nhave changed slightly. A <a class=\"reference internal\" href=\"#migrating-old-meta-api\"><span class=\"std std-ref\">migration guide</span></a>\nhas been provided to assist in converting your code to use the new,\nofficial API.</p>\n</aside>\n<section id=\"field-access-api\">\n<span id=\"model-meta-field-api\"></span><h2>Field access API<a class=\"heading-anchor\" href=\"#field-access-api\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"retrieving-a-single-field-instance-of-a-model-by-name\">\n<h3>Retrieving a single field instance of a model by name<a class=\"heading-anchor\" href=\"#retrieving-a-single-field-instance-of-a-model-by-name\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options.get_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Options.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_field</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options.get_field\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the field instance given a name of a field.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field_name</span></code> can be the name of a field on the model, a field\non an abstract or inherited model, or a field defined on another\nmodel that points to the model. In the latter case, the <code class=\"docutils literal notranslate\"><span class=\"pre\">field_name</span></code>\nwill be the <code class=\"docutils literal notranslate\"><span class=\"pre\">related_name</span></code> defined by the user or the name automatically\ngenerated by Django itself.</p>\n<p><a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.hidden\" title=\"django.db.models.Field.hidden\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Hidden</span> <span class=\"pre\">fields</span></code></a> cannot be retrieved\nby name.</p>\n<p>If a field with the given name is not found a\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/exceptions/#django.core.exceptions.FieldDoesNotExist\" title=\"django.core.exceptions.FieldDoesNotExist\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FieldDoesNotExist</span></code></a> exception will be\nraised.</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n\n<span class=\"go\"># A field on the model</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_field</span><span class=\"p\">(</span><span class=\"s1\">&#39;username&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;django.db.models.fields.CharField: username&gt;</span>\n\n<span class=\"go\"># A field from another model that has a relation with the current model</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_field</span><span class=\"p\">(</span><span class=\"s1\">&#39;logentry&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;ManyToOneRel: admin.logentry&gt;</span>\n\n<span class=\"go\"># A non existent field</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_field</span><span class=\"p\">(</span><span class=\"s1\">&#39;does_not_exist&#39;</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"w\">    </span><span class=\"o\">...</span>\n<span class=\"gr\">FieldDoesNotExist</span>: <span class=\"n\">User has no field named &#39;does_not_exist&#39;</span>\n</code></pre></div>\n<aside class=\"version-note version-deprecated\" data-version=\"1.8\">\n<p class=\"version-note-title\">Deprecated since Django 1.8</p><p><span class=\"versionmodified deprecated\">Descontinuado desde a versão 1.8: </span><a class=\"reference internal\" href=\"#django.db.models.options.Options.get_field\" title=\"django.db.models.options.Options.get_field\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Options.get_field()</span></code></a> previously accepted a <code class=\"docutils literal notranslate\"><span class=\"pre\">many_to_many</span></code>\nparameter which could be set to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> to avoid searching\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>s. The old behavior has been preserved for\nbackwards compatibility; however, the parameter and this behavior\nhas been deprecated.</p>\n<p>If you wish to filter out <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>s, you can inspect the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.many_to_many\" title=\"django.db.models.Field.many_to_many\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.many_to_many</span></code></a>\nattribute after calling <code class=\"docutils literal notranslate\"><span class=\"pre\">get_field()</span></code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"retrieving-all-field-instances-of-a-model\">\n<h3>Retrieving all field instances of a model<a class=\"heading-anchor\" href=\"#retrieving-all-field-instances-of-a-model\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.options.Options.get_fields\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Options.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_parents</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_hidden</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.options.Options.get_fields\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.8\">\n<p class=\"version-note-title\">New in Django 1.8</p></aside>\n<p>Returns a tuple of fields associated with a model. <code class=\"docutils literal notranslate\"><span class=\"pre\">get_fields()</span></code> accepts\ntwo parameters that can be used to control which fields are returned:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">include_parents</span></code></dt><dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> by default. Recursively includes fields defined on parent\nclasses. If set to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_fields()</span></code> will only search for\nfields declared directly on the current model. Fields from models that\ndirectly inherit from abstract models or proxy classes are considered\nto be local, not on the parent.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">include_hidden</span></code></dt><dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> by default. If set to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_fields()</span></code> will include\nfields that are used to back other field’s functionality. This will\nalso include any fields that have a <code class=\"docutils literal notranslate\"><span class=\"pre\">related_name</span></code> (such\nas <a class=\"reference internal\" href=\"/pt-br/1.9/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>, or\n<a class=\"reference internal\" href=\"/pt-br/1.9/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>) that start with a “+”.</p>\n</dd>\n</dl>\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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n<span class=\"go\">(&lt;ManyToOneRel: admin.logentry&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.AutoField: id&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: password&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: last_login&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_superuser&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: username&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: first_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: last_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.EmailField: email&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_staff&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_active&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: date_joined&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: groups&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: user_permissions&gt;)</span>\n\n<span class=\"go\"># Also include hidden fields.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">(</span><span class=\"n\">include_hidden</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">(&lt;ManyToOneRel: auth.user_groups&gt;,</span>\n<span class=\"go\"> &lt;ManyToOneRel: auth.user_user_permissions&gt;,</span>\n<span class=\"go\"> &lt;ManyToOneRel: admin.logentry&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.AutoField: id&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: password&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: last_login&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_superuser&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: username&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: first_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.CharField: last_name&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.EmailField: email&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_staff&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.BooleanField: is_active&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.DateTimeField: date_joined&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: groups&gt;,</span>\n<span class=\"go\"> &lt;django.db.models.fields.related.ManyToManyField: user_permissions&gt;)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"migrating-from-the-old-api\">\n<span id=\"migrating-old-meta-api\"></span><h2>Migrating from the old API<a class=\"heading-anchor\" href=\"#migrating-from-the-old-api\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>As part of the formalization of the <code class=\"docutils literal notranslate\"><span class=\"pre\">Model._meta</span></code> API (from the\n<a class=\"reference internal\" href=\"#django.db.models.options.Options\" title=\"django.db.models.options.Options\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.db.models.options.Options</span></code></a> class), a number of methods and\nproperties have been deprecated and will be removed in Django 1.10.</p>\n<p>These old APIs can be replicated by either:</p>\n<ul class=\"simple\">\n<li><p>invoking <a class=\"reference internal\" href=\"#django.db.models.options.Options.get_field\" title=\"django.db.models.options.Options.get_field\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Options.get_field()</span></code></a>, or;</p></li>\n<li><p>invoking <a class=\"reference internal\" href=\"#django.db.models.options.Options.get_fields\" title=\"django.db.models.options.Options.get_fields\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Options.get_fields()</span></code></a> to retrieve a list of all\nfields, and then filtering this list using the <a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#model-field-attributes\"><span class=\"std std-ref\">field attributes</span></a> that describe (or retrieve, in the case of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">_with_model</span></code> variants) the properties of the desired fields.</p></li>\n</ul>\n<p>Although it’s possible to make strictly equivalent replacements of the old\nmethods, that might not be the best approach. Taking the time to refactor any\nfield loops to make better use of the new API - and possibly include fields\nthat were previously excluded - will almost certainly result in better code.</p>\n<p>Assuming you have a model named <code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel</span></code>, the following substitutions\ncan be made to convert your code to the new API:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_field(name)</span></code> becomes:</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\">f</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_field</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>then check if:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f.auto_created</span> <span class=\"pre\">==</span> <span class=\"pre\">False</span></code>, because the new <code class=\"docutils literal notranslate\"><span class=\"pre\">get_field()</span></code>\nAPI will find “reverse” relations, and:</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">f.is_relation</span> <span class=\"pre\">and</span> <span class=\"pre\">f.related_model</span> <span class=\"pre\">is</span> <span class=\"pre\">None</span></code>, because the new\n<code class=\"docutils literal notranslate\"><span class=\"pre\">get_field()</span></code> API will find\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericForeignKey\" title=\"django.contrib.contenttypes.fields.GenericForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code></a> relations.</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_field_by_name(name)</span></code> returns a tuple of these four\nvalues with the following replacements:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> can be found by <code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_field(name)</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code> can be found through the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.model\" title=\"django.db.models.Field.model\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">model</span></code></a> attribute on the field.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">direct</span></code> can be found by: <code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">field.auto_created</span> <span class=\"pre\">or</span> <span class=\"pre\">field.concrete</span></code></p>\n<p>The <a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.auto_created\" title=\"django.db.models.Field.auto_created\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">auto_created</span></code></a> check excludes\nall “forward” and “reverse” relations that are created by Django, but\nthis also includes <code class=\"docutils literal notranslate\"><span class=\"pre\">AutoField</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> on proxy models.\nWe avoid filtering out these attributes using the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.concrete\" title=\"django.db.models.Field.concrete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">concrete</span></code></a> attribute.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">m2m</span></code> can be found through the\n<a class=\"reference internal\" href=\"/pt-br/1.9/ref/models/fields/#django.db.models.Field.many_to_many\" title=\"django.db.models.Field.many_to_many\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">many_to_many</span></code></a> attribute on the field.</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_fields_with_model()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">!=</span> <span class=\"n\">MyModel</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_relation</span>\n        <span class=\"ow\">or</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_one</span>\n        <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">many_to_one</span> <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">related_model</span><span class=\"p\">)</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_concrete_fields_with_model()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">!=</span> <span class=\"n\">MyModel</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">concrete</span> <span class=\"ow\">and</span> <span class=\"p\">(</span>\n        <span class=\"ow\">not</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">is_relation</span>\n        <span class=\"ow\">or</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_one</span>\n        <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">many_to_one</span> <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">related_model</span><span class=\"p\">)</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_m2m_with_model()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">!=</span> <span class=\"n\">MyModel</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">many_to_many</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">auto_created</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_all_related_objects()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"n\">f</span> <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_many</span> <span class=\"ow\">or</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_one</span><span class=\"p\">)</span>\n    <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">auto_created</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">concrete</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_all_related_objects_with_model()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">!=</span> <span class=\"n\">MyModel</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_many</span> <span class=\"ow\">or</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">one_to_one</span><span class=\"p\">)</span>\n    <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">auto_created</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">concrete</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_all_related_many_to_many_objects()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"n\">f</span> <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">(</span><span class=\"n\">include_hidden</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">many_to_many</span> <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">auto_created</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_all_related_m2m_objects_with_model()</span></code> becomes:</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=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">!=</span> <span class=\"n\">MyModel</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">(</span><span class=\"n\">include_hidden</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">many_to_many</span> <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">auto_created</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyModel._meta.get_all_field_names()</span></code> becomes:</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\">itertools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">chain</span>\n<span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">chain</span><span class=\"o\">.</span><span class=\"n\">from_iterable</span><span class=\"p\">(</span>\n    <span class=\"p\">(</span><span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">attname</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">field</span><span class=\"p\">,</span> <span class=\"s1\">&#39;attname&#39;</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"p\">(</span><span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,)</span>\n    <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()</span>\n    <span class=\"c1\"># For complete backwards compatibility, you may want to exclude</span>\n    <span class=\"c1\"># GenericForeignKey from the results.</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">many_to_one</span> <span class=\"ow\">and</span> <span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">related_model</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"p\">)))</span>\n</code></pre></div>\n<p>This provides a 100% backwards compatible replacement, ensuring that both\nfield names and attribute names <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>s are included, but fields\nassociated with <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code>s are not. A simpler version would be:</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=\"p\">[</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">get_fields</span><span class=\"p\">()]</span>\n</code></pre></div>\n<p>While this isn’t 100% backwards compatible, it may be sufficient in many\nsituations.</p>\n</li>\n</ul>\n</section>","rootId":"module-django.db.models.options","toc":[{"title":"Field access API","anchor":"field-access-api","children":[{"title":"Retrieving a single field instance of a model by name","anchor":"retrieving-a-single-field-instance-of-a-model-by-name","children":[]},{"title":"Retrieving all field instances of a model","anchor":"retrieving-all-field-instances-of-a-model","children":[]}]},{"title":"Migrating from the old API","anchor":"migrating-from-the-old-api","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Referência da API","url":"/pt-br/1.9/ref/"},{"docname":"ref/models/index","title":"Models","url":"/pt-br/1.9/ref/models/"}],"prev":{"docname":"ref/models/fields","title":"Model field reference","url":"/pt-br/1.9/ref/models/fields/"},"next":{"docname":"ref/models/relations","title":"Related objects reference","url":"/pt-br/1.9/ref/models/relations/"},"formats":{"html":"/pt-br/1.9/ref/models/meta/","markdown":"/pt-br/1.9/ref/models/meta.md","json":"/pt-br/1.9/ref/models/meta.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/ref/models/meta.txt","official":"https://docs.djangoproject.com/pt-br/1.9/ref/models/meta/","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"]}