{"title":"Model field reference","version":"4.0","locale":"en","docname":"ref/models/fields","url":"/en/4.0/ref/models/fields/","canonical":"https://djangodocs.dev/en/4.0/ref/models/fields/","summary":"This document contains all the API references of Field including the field options and field types Django offers. See also If the built-in fields don’t do the…","html":"<section id=\"module-django.db.models.fields\">\n<span id=\"model-field-reference\"></span><h1>Model field reference<a class=\"heading-anchor\" href=\"#module-django.db.models.fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>This document contains all the API references of <a class=\"reference internal\" href=\"#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> including the\n<a class=\"reference internal\" href=\"#field-options\">field options</a> and <a class=\"reference internal\" href=\"#field-types\">field types</a> Django offers.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">See also</p>\n<p>If the built-in fields don’t do the trick, you can try <a class=\"reference external\" href=\"https://github.com/django/django-localflavor\">django-localflavor</a> (<a class=\"reference external\" href=\"https://django-localflavor.readthedocs.io/\">documentation</a>), which contains assorted\npieces of code that are useful for particular countries and cultures.</p>\n<p>Also, you can easily <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/\"><span class=\"doc\">write your own custom model fields</span></a>.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Technically, these models are defined in <a class=\"reference internal\" href=\"#module-django.db.models.fields\" title=\"django.db.models.fields: Built-in field types.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models.fields</span></code></a>, but\nfor convenience they’re imported into <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#module-django.db.models\" title=\"django.db.models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code></a>; the standard\nconvention is to use <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">django.db</span> <span class=\"pre\">import</span> <span class=\"pre\">models</span></code> and refer to fields as\n<code class=\"docutils literal notranslate\"><span class=\"pre\">models.&lt;Foo&gt;Field</span></code>.</p>\n</aside>\n<section id=\"field-options\">\n<span id=\"common-model-field-options\"></span><h2>Field options<a class=\"heading-anchor\" href=\"#field-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The following arguments are available to all field types. All are optional.</p>\n<section id=\"null\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code><a class=\"heading-anchor\" href=\"#null\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.null\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">null</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.null\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, Django will store empty values as <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> in the database. Default\nis <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Avoid using <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> on string-based fields such as\n<a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a>. If a string-based field has\n<code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code>, that means it has two possible values for “no data”: <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>,\nand the empty string. In most cases, it’s redundant to have two possible values\nfor “no data;” the Django convention is to use the empty string, not\n<code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>. One exception is when a <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> has both <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code> set. In this situation, <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> is required to avoid\nunique constraint violations when saving multiple objects with blank values.</p>\n<p>For both string-based and non-string-based fields, you will also need to\nset <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code> if you wish to permit empty values in forms, as the\n<a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> parameter only affects database storage\n(see <a class=\"reference internal\" href=\"#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">blank</span></code></a>).</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>When using the Oracle database backend, the value <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> will be stored to\ndenote the empty string regardless of this attribute.</p>\n</aside>\n</section>\n<section id=\"blank\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">blank</span></code><a class=\"heading-anchor\" href=\"#blank\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.blank\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">blank</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.blank\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, the field is allowed to be blank. Default is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Note that this is different than <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a>. <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> is\npurely database-related, whereas <a class=\"reference internal\" href=\"#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">blank</span></code></a> is validation-related. If\na field has <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code>, form validation will allow entry of an empty value.\nIf a field has <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=False</span></code>, the field will be required.</p>\n<aside class=\"admonition-supplying-missing-values admonition\">\n<p class=\"admonition-title\">Supplying missing values</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code> can be used with fields having <code class=\"docutils literal notranslate\"><span class=\"pre\">null=False</span></code>, but this will\nrequire implementing <a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model.clean\" title=\"django.db.models.Model.clean\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">clean()</span></code></a> on the model in\norder to programmatically supply any missing values.</p>\n</aside>\n</section>\n<section id=\"choices\">\n<span id=\"field-choices\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code><a class=\"heading-anchor\" href=\"#choices\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.choices\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">choices</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.choices\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> consisting itself of iterables of exactly two items (e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">[(A,</span> <span class=\"pre\">B),</span> <span class=\"pre\">(A,</span> <span class=\"pre\">B)</span> <span class=\"pre\">...]</span></code>) to use as choices for this field. If choices are\ngiven, they’re enforced by <a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model validation</span></a> and the\ndefault form widget will be a select box with these choices instead of the\nstandard text field.</p>\n<p>The first element in each tuple is the actual value to be set on the model,\nand the second element is the human-readable name. 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\">YEAR_IN_SCHOOL_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;FR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Freshman&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;SO&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Sophomore&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;JR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Junior&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;SR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Senior&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;GR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Graduate&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Generally, it’s best to define choices inside a model class, and to\ndefine a suitably-named constant for each value:</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\">Student</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\">FRESHMAN</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;FR&#39;</span>\n    <span class=\"n\">SOPHOMORE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SO&#39;</span>\n    <span class=\"n\">JUNIOR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;JR&#39;</span>\n    <span class=\"n\">SENIOR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SR&#39;</span>\n    <span class=\"n\">GRADUATE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;GR&#39;</span>\n    <span class=\"n\">YEAR_IN_SCHOOL_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"n\">FRESHMAN</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Freshman&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">SOPHOMORE</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Sophomore&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">JUNIOR</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Junior&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">SENIOR</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Senior&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">GRADUATE</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Graduate&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n    <span class=\"n\">year_in_school</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">YEAR_IN_SCHOOL_CHOICES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">FRESHMAN</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">is_upperclass</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">year_in_school</span> <span class=\"ow\">in</span> <span class=\"p\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">JUNIOR</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">SENIOR</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>Though you can define a choices list outside of a model class and then\nrefer to it, defining the choices and names for each choice inside the\nmodel class keeps all of that information with the class that uses it,\nand helps reference the choices (e.g, <code class=\"docutils literal notranslate\"><span class=\"pre\">Student.SOPHOMORE</span></code>\nwill work anywhere that the <code class=\"docutils literal notranslate\"><span class=\"pre\">Student</span></code> model has been imported).</p>\n<p id=\"field-choices-named-groups\">You can also collect your available choices into named groups that can\nbe used for organizational purposes:</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\">MEDIA_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;Audio&#39;</span><span class=\"p\">,</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;vinyl&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Vinyl&#39;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;cd&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;CD&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n    <span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;Video&#39;</span><span class=\"p\">,</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;vhs&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;VHS Tape&#39;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;dvd&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;DVD&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n    <span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;unknown&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unknown&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>The first element in each tuple is the name to apply to the group. The\nsecond element is an iterable of 2-tuples, with each 2-tuple containing\na value and a human-readable name for an option. Grouped options may be\ncombined with ungrouped options within a single list (such as the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'unknown'</span></code> option in this example).</p>\n<p>For each model field that has <a class=\"reference internal\" href=\"#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> set, Django will add a\nmethod to retrieve the human-readable name for the field’s current value. See\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model.get_FOO_display\" title=\"django.db.models.Model.get_FOO_display\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_FOO_display()</span></code></a> in the database API\ndocumentation.</p>\n<p>Note that choices can be any sequence object – not necessarily a list or\ntuple. This lets you construct choices dynamically. But if you find yourself\nhacking <a class=\"reference internal\" href=\"#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> to be dynamic, you’re probably better off using\na proper database table with a <a class=\"reference internal\" href=\"#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>. <a class=\"reference internal\" href=\"#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> is\nmeant for static data that doesn’t change much, if ever.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>A new migration is created each time the order of <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> changes.</p>\n</aside>\n<p id=\"field-choices-blank-label\">Unless <a class=\"reference internal\" href=\"#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">blank=False</span></code></a> is set on the field along with a\n<a class=\"reference internal\" href=\"#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> then a label containing <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;---------&quot;</span></code> will be rendered\nwith the select box. To override this behavior, add a tuple to <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code>\ncontaining <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>; e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">(None,</span> <span class=\"pre\">'Your</span> <span class=\"pre\">String</span> <span class=\"pre\">For</span> <span class=\"pre\">Display')</span></code>.\nAlternatively, you can use an empty string instead of <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> where this makes\nsense - such as on a <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>.</p>\n<section id=\"enumeration-types\">\n<span id=\"field-choices-enum-types\"></span><h4>Enumeration types<a class=\"heading-anchor\" href=\"#enumeration-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>In addition, Django provides enumeration types that you can subclass to define\nchoices in a concise way:</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.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">gettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Student</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">YearInSchool</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextChoices</span><span class=\"p\">):</span>\n        <span class=\"n\">FRESHMAN</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;FR&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Freshman&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">SOPHOMORE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SO&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Sophomore&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">JUNIOR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;JR&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Junior&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">SENIOR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SR&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Senior&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">GRADUATE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;GR&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Graduate&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">year_in_school</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">YearInSchool</span><span class=\"o\">.</span><span class=\"n\">choices</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">YearInSchool</span><span class=\"o\">.</span><span class=\"n\">FRESHMAN</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">is_upperclass</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">year_in_school</span> <span class=\"ow\">in</span> <span class=\"p\">{</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">YearInSchool</span><span class=\"o\">.</span><span class=\"n\">JUNIOR</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">YearInSchool</span><span class=\"o\">.</span><span class=\"n\">SENIOR</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n<p>These work similar to <a class=\"reference external\" href=\"https://docs.python.org/3/library/enum.html#module-enum\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">enum</span></code></a> from Python’s standard library, but with some\nmodifications:</p>\n<ul>\n<li><p>Enum member values are a tuple of arguments to use when constructing the\nconcrete data type. Django supports adding an extra string value to the end\nof this tuple to be used as the human-readable name, or <code class=\"docutils literal notranslate\"><span class=\"pre\">label</span></code>. The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">label</span></code> can be a lazy translatable string. Thus, in most cases, the member\nvalue will be a <code class=\"docutils literal notranslate\"><span class=\"pre\">(value,</span> <span class=\"pre\">label)</span></code> two-tuple. See below for <a class=\"reference internal\" href=\"#field-choices-enum-subclassing\"><span class=\"std std-ref\">an example\nof subclassing choices</span></a> using a more complex\ndata type. If a tuple is not provided, or the last item is not a (lazy)\nstring, the <code class=\"docutils literal notranslate\"><span class=\"pre\">label</span></code> is <a class=\"reference internal\" href=\"#field-choices-enum-auto-label\"><span class=\"std std-ref\">automatically generated</span></a> from the member name.</p></li>\n<li><p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">.label</span></code> property is added on values, to return the human-readable name.</p></li>\n<li><p>A number of custom properties are added to the enumeration classes –\n<code class=\"docutils literal notranslate\"><span class=\"pre\">.choices</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.labels</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.values</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">.names</span></code> – to make it easier\nto access lists of those separate parts of the enumeration. Use <code class=\"docutils literal notranslate\"><span class=\"pre\">.choices</span></code>\nas a suitable value to pass to <a class=\"reference internal\" href=\"#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> in a field definition.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>These property names cannot be used as member names as they would conflict.</p>\n</aside>\n</li>\n<li><p>The use of <a class=\"reference external\" href=\"https://docs.python.org/3/library/enum.html#enum.unique\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">enum.unique()</span></code></a> is enforced to ensure that values cannot be\ndefined multiple times. This is unlikely to be expected in choices for a\nfield.</p></li>\n</ul>\n<p>Note that using <code class=\"docutils literal notranslate\"><span class=\"pre\">YearInSchool.SENIOR</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">YearInSchool['SENIOR']</span></code>, or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">YearInSchool('SR')</span></code> to access or lookup enum members work as expected, as do\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">.name</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">.value</span></code> properties on the members.</p>\n<p id=\"field-choices-enum-auto-label\">If you don’t need to have the human-readable names translated, you can have\nthem inferred from the member name (replacing underscores with spaces and using\ntitle-case):</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Vehicle</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextChoices</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"n\">CAR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;C&#39;</span>\n<span class=\"gp\">... </span>    <span class=\"n\">TRUCK</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;T&#39;</span>\n<span class=\"gp\">... </span>    <span class=\"n\">JET_SKI</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;J&#39;</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Vehicle</span><span class=\"o\">.</span><span class=\"n\">JET_SKI</span><span class=\"o\">.</span><span class=\"n\">label</span>\n<span class=\"go\">&#39;Jet Ski&#39;</span>\n</code></pre></div>\n<p>Since the case where the enum values need to be integers is extremely common,\nDjango provides an <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerChoices</span></code> class. 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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Card</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Suit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerChoices</span><span class=\"p\">):</span>\n        <span class=\"n\">DIAMOND</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"n\">SPADE</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n        <span class=\"n\">HEART</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n        <span class=\"n\">CLUB</span> <span class=\"o\">=</span> <span class=\"mi\">4</span>\n\n    <span class=\"n\">suit</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">Suit</span><span class=\"o\">.</span><span class=\"n\">choices</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>It is also possible to make use of the <a class=\"reference external\" href=\"https://docs.python.org/3/library/enum.html#functional-api\">Enum Functional API</a> with the caveat\nthat labels are automatically generated as highlighted 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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">MedalType</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextChoices</span><span class=\"p\">(</span><span class=\"s1\">&#39;MedalType&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;GOLD SILVER BRONZE&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">MedalType</span><span class=\"o\">.</span><span class=\"n\">choices</span>\n<span class=\"go\">[(&#39;GOLD&#39;, &#39;Gold&#39;), (&#39;SILVER&#39;, &#39;Silver&#39;), (&#39;BRONZE&#39;, &#39;Bronze&#39;)]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Place</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerChoices</span><span class=\"p\">(</span><span class=\"s1\">&#39;Place&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;FIRST SECOND THIRD&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Place</span><span class=\"o\">.</span><span class=\"n\">choices</span>\n<span class=\"go\">[(1, &#39;First&#39;), (2, &#39;Second&#39;), (3, &#39;Third&#39;)]</span>\n</code></pre></div>\n<p id=\"field-choices-enum-subclassing\">If you require support for a concrete data type other than <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>,\nyou can subclass <code class=\"docutils literal notranslate\"><span class=\"pre\">Choices</span></code> and the required concrete data type, e.g.\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">date</span></code></a> for use with <a class=\"reference internal\" href=\"#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</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\">class</span><span class=\"w\"> </span><span class=\"nc\">MoonLandings</span><span class=\"p\">(</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Choices</span><span class=\"p\">):</span>\n    <span class=\"n\">APOLLO_11</span> <span class=\"o\">=</span> <span class=\"mi\">1969</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 11 (Eagle)&#39;</span>\n    <span class=\"n\">APOLLO_12</span> <span class=\"o\">=</span> <span class=\"mi\">1969</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">19</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 12 (Intrepid)&#39;</span>\n    <span class=\"n\">APOLLO_14</span> <span class=\"o\">=</span> <span class=\"mi\">1971</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 14 (Antares)&#39;</span>\n    <span class=\"n\">APOLLO_15</span> <span class=\"o\">=</span> <span class=\"mi\">1971</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 15 (Falcon)&#39;</span>\n    <span class=\"n\">APOLLO_16</span> <span class=\"o\">=</span> <span class=\"mi\">1972</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">21</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 16 (Orion)&#39;</span>\n    <span class=\"n\">APOLLO_17</span> <span class=\"o\">=</span> <span class=\"mi\">1972</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Apollo 17 (Challenger)&#39;</span>\n</code></pre></div>\n<p>There are some additional caveats to be aware of:</p>\n<ul>\n<li><p>Enumeration types do not support <a class=\"reference internal\" href=\"#field-choices-named-groups\"><span class=\"std std-ref\">named groups</span></a>.</p></li>\n<li><p>Because an enumeration with a concrete data type requires all values to match\nthe type, overriding the <a class=\"reference internal\" href=\"#field-choices-blank-label\"><span class=\"std std-ref\">blank label</span></a>\ncannot be achieved by creating a member with a value of <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Instead,\nset the <code class=\"docutils literal notranslate\"><span class=\"pre\">__empty__</span></code> attribute on the class:</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\">Answer</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerChoices</span><span class=\"p\">):</span>\n    <span class=\"n\">NO</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;No&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">YES</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Yes&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">__empty__</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;(Unknown)&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n</section>\n<section id=\"db-column\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">db_column</span></code><a class=\"heading-anchor\" href=\"#db-column\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.db_column\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_column</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.db_column\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The name of the database column to use for this field. If this isn’t given,\nDjango will use the field’s name.</p>\n<p>If your database column name is an SQL reserved word, or contains\ncharacters that aren’t allowed in Python variable names – notably, the\nhyphen – that’s OK. Django quotes column and table names behind the\nscenes.</p>\n</section>\n<section id=\"db-index\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">db_index</span></code><a class=\"heading-anchor\" href=\"#db-index\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.db_index\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_index</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.db_index\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, a database index will be created for this field.</p>\n</section>\n<section id=\"db-tablespace\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code><a class=\"heading-anchor\" href=\"#db-tablespace\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.db_tablespace\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_tablespace</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.db_tablespace\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The name of the <a class=\"reference internal\" href=\"/en/4.0/topics/db/tablespaces/\"><span class=\"doc\">database tablespace</span></a> to use for\nthis field’s index, if this field is indexed. The default is the project’s\n<a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-DEFAULT_INDEX_TABLESPACE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_INDEX_TABLESPACE</span></code></a> setting, if set, or the\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/options/#django.db.models.Options.db_tablespace\" title=\"django.db.models.Options.db_tablespace\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_tablespace</span></code></a> of the model, if any. If the backend doesn’t\nsupport tablespaces for indexes, this option is ignored.</p>\n</section>\n<section id=\"default\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code><a class=\"heading-anchor\" href=\"#default\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.default\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">default</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The default value for the field. This can be a value or a callable object. If\ncallable it will be called every time a new object is created.</p>\n<p>The default can’t be a mutable object (model instance, <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code>, etc.),\nas a reference to the same instance of that object would be used as the default\nvalue in all new model instances. Instead, wrap the desired default in a\ncallable. For example, if you want to specify a default <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> for\n<a class=\"reference internal\" href=\"#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a>, use a function:</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\">def</span><span class=\"w\"> </span><span class=\"nf\">contact_default</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;to1@example.com&quot;</span><span class=\"p\">}</span>\n\n<span class=\"n\">contact_info</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"s2\">&quot;ContactInfo&quot;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">contact_default</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code>s can’t be used for field options like <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> because they\ncan’t be <a class=\"reference internal\" href=\"/en/4.0/topics/migrations/#migration-serializing\"><span class=\"std std-ref\">serialized by migrations</span></a>. See that\ndocumentation for other caveats.</p>\n<p>For fields like <a class=\"reference internal\" href=\"#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 map to model instances, defaults\nshould be the value of the field they reference (<code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> unless\n<a class=\"reference internal\" href=\"#django.db.models.ForeignKey.to_field\" title=\"django.db.models.ForeignKey.to_field\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">to_field</span></code></a> is set) instead of model instances.</p>\n<p>The default value is used when new model instances are created and a value\nisn’t provided for the field. When the field is a primary key, the default is\nalso used when the field is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</section>\n<section id=\"editable\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">editable</span></code><a class=\"heading-anchor\" href=\"#editable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.editable\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">editable</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.editable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, the field will not be displayed in the admin or any other\n<a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a>. They are also skipped during <a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#validating-objects\"><span class=\"std std-ref\">model\nvalidation</span></a>. Default is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</section>\n<section id=\"error-messages\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code><a class=\"heading-anchor\" href=\"#error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.error_messages\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">error_messages</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.error_messages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">error_messages</span></code> argument lets you override the default messages that the\nfield will raise. Pass in a dictionary with keys matching the error messages you\nwant to override.</p>\n<p>Error message keys include <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">blank</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">invalid</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">invalid_choice</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_date</span></code>. Additional error message keys are\nspecified for each field in the <a class=\"reference internal\" href=\"#field-types\">Field types</a> section below.</p>\n<p>These error messages often don’t propagate to forms. See\n<a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#considerations-regarding-model-errormessages\"><span class=\"std std-ref\">Considerations regarding model’s error_messages</span></a>.</p>\n</section>\n<section id=\"help-text\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code><a class=\"heading-anchor\" href=\"#help-text\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.help_text\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">help_text</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Extra “help” text to be displayed with the form widget. It’s useful for\ndocumentation even if your field isn’t used on a form.</p>\n<p>Note that this value is <em>not</em> HTML-escaped in automatically-generated\nforms. This lets you include HTML in <a class=\"reference internal\" href=\"#django.db.models.Field.help_text\" title=\"django.db.models.Field.help_text\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">help_text</span></code></a> if you so\ndesire. 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\">help_text</span><span class=\"o\">=</span><span class=\"s2\">&quot;Please use the following format: &lt;em&gt;YYYY-MM-DD&lt;/em&gt;.&quot;</span>\n</code></pre></div>\n<p>Alternatively you can use plain text and\n<a class=\"reference internal\" href=\"/en/4.0/ref/utils/#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.html.escape()</span></code></a> to escape any HTML special characters. Ensure\nthat you escape any help text that may come from untrusted users to avoid a\ncross-site scripting attack.</p>\n</section>\n<section id=\"primary-key\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key</span></code><a class=\"heading-anchor\" href=\"#primary-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.primary_key\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">primary_key</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.primary_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, this field is the primary key for the model.</p>\n<p>If you don’t specify <code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key=True</span></code> for any field in your model, Django\nwill automatically add a field to hold the primary key, so you don’t need to\nset <code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key=True</span></code> on any of your fields unless you want to override the\ndefault primary-key behavior. The type of auto-created primary key fields can\nbe specified per app in <a class=\"reference internal\" href=\"/en/4.0/ref/applications/#django.apps.AppConfig.default_auto_field\" title=\"django.apps.AppConfig.default_auto_field\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">AppConfig.default_auto_field</span></code></a> or globally in the\n<a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-DEFAULT_AUTO_FIELD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_AUTO_FIELD</span></code></a> setting. For more, see\n<a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#automatic-primary-key-fields\"><span class=\"std std-ref\">Automatic primary key fields</span></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key=True</span></code> implies <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null=False</span></code></a> and\n<a class=\"reference internal\" href=\"#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique=True</span></code></a>. Only one primary key is allowed on an\nobject.</p>\n<p>The primary key field is read-only. If you change the value of the primary\nkey on an existing object and then save it, a new object will be created\nalongside the old one.</p>\n<aside class=\"version-note version-changed\" data-version=\"3.2\">\n<p class=\"version-note-title\">Changed in Django 3.2</p><p>In older versions, auto-created primary key fields were always\n<a class=\"reference internal\" href=\"#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a>s.</p>\n</aside>\n</section>\n<section id=\"unique\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code><a class=\"heading-anchor\" href=\"#unique\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.unique\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">unique</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.unique\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, this field must be unique throughout the table.</p>\n<p>This is enforced at the database level and by model validation. If\nyou try to save a model with a duplicate value in a <a class=\"reference internal\" href=\"#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique</span></code></a>\nfield, a <a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.db.IntegrityError</span></code></a> will be raised by the model’s\n<a class=\"reference internal\" href=\"/en/4.0/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.</p>\n<p>This option is valid on all field types except <a class=\"reference internal\" href=\"#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> and\n<a class=\"reference internal\" href=\"#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>.</p>\n<p>Note that when <code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, you don’t need to specify\n<a class=\"reference internal\" href=\"#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_index</span></code></a>, because <code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code> implies the creation of an index.</p>\n</section>\n<section id=\"unique-for-date\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_date</span></code><a class=\"heading-anchor\" href=\"#unique-for-date\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.unique_for_date\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">unique_for_date</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.unique_for_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Set this to the name of a <a class=\"reference internal\" href=\"#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> or <a class=\"reference internal\" href=\"#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> to\nrequire that this field be unique for the value of the date field.</p>\n<p>For example, if you have a field <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> that has\n<code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_date=&quot;pub_date&quot;</span></code>, then Django wouldn’t allow the entry of two\nrecords with the same <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></code>.</p>\n<p>Note that if you set this to point to a <a class=\"reference internal\" href=\"#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a>, only the date\nportion of the field will be considered. Besides, when <a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, the check will be performed in the <a class=\"reference internal\" href=\"/en/4.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">current time zone</span></a> at the time the object gets saved.</p>\n<p>This is enforced by <a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model.validate_unique\" title=\"django.db.models.Model.validate_unique\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.validate_unique()</span></code></a> during model validation\nbut not at the database level. If any <a class=\"reference internal\" href=\"#django.db.models.Field.unique_for_date\" title=\"django.db.models.Field.unique_for_date\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_for_date</span></code></a> constraint\ninvolves fields that are not part of a <a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> (for\nexample, if one of the fields is listed in <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> or has\n<a class=\"reference internal\" href=\"#django.db.models.Field.editable\" title=\"django.db.models.Field.editable\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">editable=False</span></code></a>), <a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model.validate_unique\" title=\"django.db.models.Model.validate_unique\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.validate_unique()</span></code></a> will\nskip validation for that particular constraint.</p>\n</section>\n<section id=\"unique-for-month\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_month</span></code><a class=\"heading-anchor\" href=\"#unique-for-month\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.unique_for_month\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">unique_for_month</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.unique_for_month\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like <a class=\"reference internal\" href=\"#django.db.models.Field.unique_for_date\" title=\"django.db.models.Field.unique_for_date\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_for_date</span></code></a>, but requires the field to be unique with\nrespect to the month.</p>\n</section>\n<section id=\"unique-for-year\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">unique_for_year</span></code><a class=\"heading-anchor\" href=\"#unique-for-year\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.unique_for_year\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">unique_for_year</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.unique_for_year\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like <a class=\"reference internal\" href=\"#django.db.models.Field.unique_for_date\" title=\"django.db.models.Field.unique_for_date\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_for_date</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.Field.unique_for_month\" title=\"django.db.models.Field.unique_for_month\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_for_month</span></code></a>.</p>\n</section>\n<section id=\"verbose-name\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code><a class=\"heading-anchor\" href=\"#verbose-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.verbose_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.verbose_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A human-readable name for the field. If the verbose name isn’t given, Django\nwill automatically create it using the field’s attribute name, converting\nunderscores to spaces. See <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#verbose-field-names\"><span class=\"std std-ref\">Verbose field names</span></a>.</p>\n</section>\n<section id=\"validators\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">validators</span></code><a class=\"heading-anchor\" href=\"#validators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.validators\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">validators</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.validators\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A list of validators to run for this field. See the <a class=\"reference internal\" href=\"/en/4.0/ref/validators/\"><span class=\"doc\">validators\ndocumentation</span></a> for more information.</p>\n<section id=\"registering-and-fetching-lookups\">\n<h4>Registering and fetching lookups<a class=\"heading-anchor\" href=\"#registering-and-fetching-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> implements the <a class=\"reference internal\" href=\"/en/4.0/ref/models/lookups/#lookup-registration-api\"><span class=\"std std-ref\">lookup registration API</span></a>.\nThe API can be used to customize which lookups are available for a field class, and\nhow lookups are fetched from a field.</p>\n</section>\n</section>\n</section>\n<section id=\"field-types\">\n<span id=\"model-field-types\"></span><h2>Field types<a class=\"heading-anchor\" href=\"#field-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"autofield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AutoField</span></code><a class=\"heading-anchor\" href=\"#autofield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.AutoField\">\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\">AutoField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.AutoField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>An <a class=\"reference internal\" href=\"#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> that automatically increments\naccording to available IDs. You usually won’t need to use this directly; a\nprimary key field will automatically be added to your model if you don’t specify\notherwise. See <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#automatic-primary-key-fields\"><span class=\"std std-ref\">Automatic primary key fields</span></a>.</p>\n</section>\n<section id=\"bigautofield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">BigAutoField</span></code><a class=\"heading-anchor\" href=\"#bigautofield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BigAutoField\">\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\">BigAutoField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BigAutoField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A 64-bit integer, much like an <a class=\"reference internal\" href=\"#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a> except that it is\nguaranteed to fit numbers from <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">9223372036854775807</span></code>.</p>\n</section>\n<section id=\"bigintegerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">BigIntegerField</span></code><a class=\"heading-anchor\" href=\"#bigintegerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BigIntegerField\">\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\">BigIntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BigIntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A 64-bit integer, much like an <a class=\"reference internal\" href=\"#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> except that it is\nguaranteed to fit numbers from <code class=\"docutils literal notranslate\"><span class=\"pre\">-9223372036854775808</span></code> to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">9223372036854775807</span></code>. The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NumberInput</span></code></a>.</p>\n</section>\n<section id=\"binaryfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">BinaryField</span></code><a class=\"heading-anchor\" href=\"#binaryfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BinaryField\">\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\">BinaryField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BinaryField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A field to store raw binary data. It can be assigned <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#bytes\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">bytes</span></code></a>,\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#bytearray\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">bytearray</span></code></a>, or <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#memoryview\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">memoryview</span></code></a>.</p>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">BinaryField</span></code> sets <a class=\"reference internal\" href=\"#django.db.models.Field.editable\" title=\"django.db.models.Field.editable\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">editable</span></code></a> to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, in which\ncase it can’t be included in a <a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">BinaryField</span></code> has one extra optional argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BinaryField.max_length\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BinaryField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">max_length</span></span><a class=\"heading-anchor\" href=\"#django.db.models.BinaryField.max_length\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The maximum length (in bytes) of the field. The maximum length is enforced\nin Django’s validation using\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.MaxLengthValidator\" title=\"django.core.validators.MaxLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MaxLengthValidator</span></code></a>.</p>\n</dd></dl>\n\n<aside class=\"admonition-abusing-binaryfield admonition\">\n<p class=\"admonition-title\">Abusing <code class=\"docutils literal notranslate\"><span class=\"pre\">BinaryField</span></code></p>\n<p>Although you might think about storing files in the database, consider that\nit is bad design in 99% of the cases. This field is <em>not</em> a replacement for\nproper <a class=\"reference internal\" href=\"/en/4.0/howto/static-files/\"><span class=\"doc\">static files</span></a> handling.</p>\n</aside>\n</section>\n<section id=\"booleanfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code><a class=\"heading-anchor\" href=\"#booleanfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.BooleanField\">\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\">BooleanField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.BooleanField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A true/false field.</p>\n<p>The default form widget for this field is <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CheckboxInput</span></code></a>,\nor <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.NullBooleanSelect\" title=\"django.forms.NullBooleanSelect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NullBooleanSelect</span></code></a> if <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null=True</span></code></a>.</p>\n<p>The default value of <code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> when <a class=\"reference internal\" href=\"#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.default</span></code></a>\nisn’t defined.</p>\n</section>\n<section id=\"charfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code><a class=\"heading-anchor\" href=\"#charfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CharField\">\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\">CharField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.CharField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A string field, for small- to large-sized strings.</p>\n<p>For large amounts of text, use <a class=\"reference internal\" href=\"#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a>.</p>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>.</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> has two extra arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CharField.max_length\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CharField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">max_length</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CharField.max_length\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Required. The maximum length (in characters) of the field. The max_length\nis enforced at the database level and in Django’s validation using\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.MaxLengthValidator\" title=\"django.core.validators.MaxLengthValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MaxLengthValidator</span></code></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>If you are writing an application that must be portable to multiple\ndatabase backends, you should be aware that there are restrictions on\n<code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> for some backends. Refer to the <a class=\"reference internal\" href=\"/en/4.0/ref/databases/\"><span class=\"doc\">database backend\nnotes</span></a> for details.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CharField.db_collation\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CharField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_collation</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CharField.db_collation\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"3.2\">\n<p class=\"version-note-title\">New in Django 3.2</p></aside>\n<p>Optional. The database collation name of the field.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Collation names are not standardized. As such, this will not be\nportable across multiple database backends.</p>\n</aside>\n<aside class=\"admonition-oracle admonition\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle supports collations only when the <code class=\"docutils literal notranslate\"><span class=\"pre\">MAX_STRING_SIZE</span></code> database\ninitialization parameter is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">EXTENDED</span></code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"datefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code><a class=\"heading-anchor\" href=\"#datefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DateField\">\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\">DateField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now_add</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.DateField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A date, represented in Python by a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code> instance. Has a few extra,\noptional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DateField.auto_now\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">DateField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">auto_now</span></span><a class=\"heading-anchor\" href=\"#django.db.models.DateField.auto_now\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Automatically set the field to now every time the object is saved. Useful\nfor “last-modified” timestamps. Note that the current date is <em>always</em>\nused; it’s not just a default value that you can override.</p>\n<p>The field is only automatically updated when calling <a class=\"reference internal\" href=\"/en/4.0/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\">Model.save()</span></code></a>. The field isn’t updated when making updates\nto other fields in other ways such as <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.update()</span></code></a>, though you can specify a custom\nvalue for the field in an update like that.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DateField.auto_now_add\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">DateField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">auto_now_add</span></span><a class=\"heading-anchor\" href=\"#django.db.models.DateField.auto_now_add\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Automatically set the field to now when the object is first created. Useful\nfor creation of timestamps. Note that the current date is <em>always</em> used;\nit’s not just a default value that you can override. So even if you\nset a value for this field when creating the object, it will be ignored.\nIf you want to be able to modify this field, set the following instead of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now_add=True</span></code>:</p>\n<ul class=\"simple\">\n<li><p>For <a class=\"reference internal\" href=\"#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">default=date.today</span></code> - from\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date.today\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">datetime.date.today()</span></code></a></p></li>\n<li><p>For <a class=\"reference internal\" href=\"#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">default=timezone.now</span></code> - from\n<a class=\"reference internal\" href=\"/en/4.0/ref/utils/#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.timezone.now()</span></code></a></p></li>\n</ul>\n</dd></dl>\n\n<p>The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.DateInput\" title=\"django.forms.DateInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateInput</span></code></a>. The admin adds a JavaScript calendar,\nand a shortcut for “Today”. Includes an additional <code class=\"docutils literal notranslate\"><span class=\"pre\">invalid_date</span></code> error\nmessage key.</p>\n<p>The options <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now_add</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> are mutually exclusive.\nAny combination of these options will result in an error.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>As currently implemented, setting <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now_add</span></code> to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> will cause the field to have <code class=\"docutils literal notranslate\"><span class=\"pre\">editable=False</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">blank=True</span></code>\nset.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now_add</span></code> options will always use the date in\nthe <a class=\"reference internal\" href=\"/en/4.0/topics/i18n/timezones/#default-current-time-zone\"><span class=\"std std-ref\">default timezone</span></a> at the moment of\ncreation or update. If you need something different, you may want to\nconsider using your own callable default or overriding <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> instead\nof using <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now_add</span></code>; or using a <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code>\ninstead of a <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> and deciding how to handle the conversion from\ndatetime to date at display time.</p>\n</aside>\n</section>\n<section id=\"datetimefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code><a class=\"heading-anchor\" href=\"#datetimefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DateTimeField\">\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\">DateTimeField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now_add</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.DateTimeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A date and time, represented in Python by a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code> instance.\nTakes the same extra arguments as <a class=\"reference internal\" href=\"#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>.</p>\n<p>The default form widget for this field is a single\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.DateTimeInput\" title=\"django.forms.DateTimeInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeInput</span></code></a>. The admin uses two separate\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> widgets with JavaScript shortcuts.</p>\n</section>\n<section id=\"decimalfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code><a class=\"heading-anchor\" href=\"#decimalfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DecimalField\">\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\">DecimalField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_digits</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">decimal_places</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.DecimalField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A fixed-precision decimal number, represented in Python by a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/decimal.html#decimal.Decimal\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Decimal</span></code></a> instance. It validates the input using\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.DecimalValidator\" title=\"django.core.validators.DecimalValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalValidator</span></code></a>.</p>\n<p>Has two <strong>required</strong> arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DecimalField.max_digits\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">DecimalField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">max_digits</span></span><a class=\"heading-anchor\" href=\"#django.db.models.DecimalField.max_digits\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The maximum number of digits allowed in the number. Note that this number\nmust be greater than or equal to <code class=\"docutils literal notranslate\"><span class=\"pre\">decimal_places</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DecimalField.decimal_places\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">DecimalField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">decimal_places</span></span><a class=\"heading-anchor\" href=\"#django.db.models.DecimalField.decimal_places\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The number of decimal places to store with the number.</p>\n</dd></dl>\n\n<p>For example, to store numbers up to <code class=\"docutils literal notranslate\"><span class=\"pre\">999.99</span></code> with a resolution of 2 decimal\nplaces, you’d use:</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\">models</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">,</span> <span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>And to store numbers up to approximately one billion with a resolution of 10\ndecimal places:</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\">models</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">,</span> <span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">19</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NumberInput</span></code></a>\nwhen <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> or\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> otherwise.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>For more information about the differences between the\n<a class=\"reference internal\" href=\"#django.db.models.FloatField\" title=\"django.db.models.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.DecimalField\" title=\"django.db.models.DecimalField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code></a> classes, please\nsee <a class=\"reference internal\" href=\"#floatfield-vs-decimalfield\"><span class=\"std std-ref\">FloatField vs. DecimalField</span></a>. You\nshould also be aware of <a class=\"reference internal\" href=\"/en/4.0/ref/databases/#sqlite-decimal-handling\"><span class=\"std std-ref\">SQLite limitations</span></a>\nof decimal fields.</p>\n</aside>\n</section>\n<section id=\"durationfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DurationField</span></code><a class=\"heading-anchor\" href=\"#durationfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DurationField\">\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\">DurationField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.DurationField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A field for storing periods of time - modeled in Python by\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">timedelta</span></code></a>. When used on PostgreSQL, the data type\nused is an <code class=\"docutils literal notranslate\"><span class=\"pre\">interval</span></code> and on Oracle the data type is <code class=\"docutils literal notranslate\"><span class=\"pre\">INTERVAL</span> <span class=\"pre\">DAY(9)</span> <span class=\"pre\">TO</span>\n<span class=\"pre\">SECOND(6)</span></code>. Otherwise a <code class=\"docutils literal notranslate\"><span class=\"pre\">bigint</span></code> of microseconds is used.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Arithmetic with <code class=\"docutils literal notranslate\"><span class=\"pre\">DurationField</span></code> works in most cases. However on all\ndatabases other than PostgreSQL, comparing the value of a <code class=\"docutils literal notranslate\"><span class=\"pre\">DurationField</span></code>\nto arithmetic on <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code> instances will not work as expected.</p>\n</aside>\n</section>\n<section id=\"emailfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField</span></code><a class=\"heading-anchor\" href=\"#emailfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.EmailField\">\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\">EmailField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">254</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.EmailField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> that checks that the value is a valid email address using\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.EmailValidator\" title=\"django.core.validators.EmailValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailValidator</span></code></a>.</p>\n</section>\n<section id=\"filefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code><a class=\"heading-anchor\" href=\"#filefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FileField\">\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\">FileField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">upload_to</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">storage</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">100</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.FileField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A file-upload field.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key</span></code> argument isn’t supported and will raise an error if\nused.</p>\n</aside>\n<p>Has two optional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FileField.upload_to\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FileField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">upload_to</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FileField.upload_to\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This attribute provides a way of setting the upload directory and file name,\nand can be set in two ways. In both cases, the value is passed to the\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.save\" title=\"django.core.files.storage.Storage.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Storage.save()</span></code></a> method.</p>\n<p>If you specify a string value or a <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.Path\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Path</span></code></a>, it may contain\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/time.html#time.strftime\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">strftime()</span></code></a> formatting, which will be replaced by the date/time\nof the file upload (so that uploaded files don’t fill up the given\ndirectory). 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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</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\"># file will be uploaded to MEDIA_ROOT/uploads</span>\n    <span class=\"n\">upload</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;uploads/&#39;</span><span class=\"p\">)</span>\n    <span class=\"c1\"># or...</span>\n    <span class=\"c1\"># file will be saved to MEDIA_ROOT/uploads/2015/01/30</span>\n    <span class=\"n\">upload</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;uploads/%Y/%m/</span><span class=\"si\">%d</span><span class=\"s1\">/&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>If you are using the default\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.FileSystemStorage\" title=\"django.core.files.storage.FileSystemStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileSystemStorage</span></code></a>, the string value\nwill be appended to your <a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> path to form the location on\nthe local filesystem where uploaded files will be stored. If you are using\na different storage, check that storage’s documentation to see how it\nhandles <code class=\"docutils literal notranslate\"><span class=\"pre\">upload_to</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">upload_to</span></code> may also be a callable, such as a function. This will be\ncalled to obtain the upload path, including the filename. This callable must\naccept two arguments and return a Unix-style path (with forward slashes)\nto be passed along to the storage system. The two arguments are:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Argument</p></th>\n<th class=\"head\"><p>Description</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">instance</span></code></p></td>\n<td><p>An instance of the model where the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code> is defined. More specifically,\nthis is the particular instance where the\ncurrent file is being attached.</p>\n<p>In most cases, this object will not have been\nsaved to the database yet, so if it uses the\ndefault <code class=\"docutils literal notranslate\"><span class=\"pre\">AutoField</span></code>, <em>it might not yet have a\nvalue for its primary key field</em>.</p>\n</td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">filename</span></code></p></td>\n<td><p>The filename that was originally given to the\nfile. This may or may not be taken into account\nwhen determining the final destination path.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">user_directory_path</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">):</span>\n    <span class=\"c1\"># file will be uploaded to MEDIA_ROOT/user_&lt;id&gt;/&lt;filename&gt;</span>\n    <span class=\"k\">return</span> <span class=\"s1\">&#39;user_</span><span class=\"si\">{0}</span><span class=\"s1\">/</span><span class=\"si\">{1}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</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\">upload</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"n\">user_directory_path</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FileField.storage\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FileField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">storage</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FileField.storage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A storage object, or a callable which returns a storage object. This\nhandles the storage and retrieval of your files. See <a class=\"reference internal\" href=\"/en/4.0/topics/files/\"><span class=\"doc\">Managing files</span></a>\nfor details on how to provide this object.</p>\n</dd></dl>\n\n<p>The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ClearableFileInput</span></code></a>.</p>\n<p>Using a <a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> or an <a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> (see below) in a model\ntakes a few steps:</p>\n<ol class=\"arabic simple\">\n<li><p>In your settings file, you’ll need to define <a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> as the\nfull path to a directory where you’d like Django to store uploaded files.\n(For performance, these files are not stored in the database.) Define\n<a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> as the base public URL of that directory. Make sure\nthat this directory is writable by the web server’s user account.</p></li>\n<li><p>Add the <a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> or <a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> to your model, defining\nthe <a class=\"reference internal\" href=\"#django.db.models.FileField.upload_to\" title=\"django.db.models.FileField.upload_to\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">upload_to</span></code></a> option to specify a subdirectory of\n<a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> to use for uploaded files.</p></li>\n<li><p>All that will be stored in your database is a path to the file\n(relative to <a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a>). You’ll most likely want to use the\nconvenience <a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile.url\" title=\"django.db.models.fields.files.FieldFile.url\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">url</span></code></a> attribute\nprovided by Django. For example, if your <a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> is called\n<code class=\"docutils literal notranslate\"><span class=\"pre\">mug_shot</span></code>, you can get the absolute path to your image in a template with\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">object.mug_shot.url</span> <span class=\"pre\">}}</span></code>.</p></li>\n</ol>\n<p>For example, say your <a class=\"reference internal\" href=\"/en/4.0/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">'/home/media'</span></code>, and\n<a class=\"reference internal\" href=\"#django.db.models.FileField.upload_to\" title=\"django.db.models.FileField.upload_to\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">upload_to</span></code></a> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">'photos/%Y/%m/%d'</span></code>. The <code class=\"docutils literal notranslate\"><span class=\"pre\">'%Y/%m/%d'</span></code>\npart of <a class=\"reference internal\" href=\"#django.db.models.FileField.upload_to\" title=\"django.db.models.FileField.upload_to\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">upload_to</span></code></a> is <a class=\"reference external\" href=\"https://docs.python.org/3/library/time.html#time.strftime\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">strftime()</span></code></a> formatting;\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'%Y'</span></code> is the four-digit year, <code class=\"docutils literal notranslate\"><span class=\"pre\">'%m'</span></code> is the two-digit month and <code class=\"docutils literal notranslate\"><span class=\"pre\">'%d'</span></code> is\nthe two-digit day. If you upload a file on Jan. 15, 2007, it will be saved in\nthe directory <code class=\"docutils literal notranslate\"><span class=\"pre\">/home/media/photos/2007/01/15</span></code>.</p>\n<p>If you wanted to retrieve the uploaded file’s on-disk filename, or the file’s\nsize, you could use the <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File.name\" title=\"django.core.files.File.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a> and\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File.size\" title=\"django.core.files.File.size\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">size</span></code></a> attributes respectively; for more\ninformation on the available attributes and methods, see the\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> class reference and the <a class=\"reference internal\" href=\"/en/4.0/topics/files/\"><span class=\"doc\">Managing files</span></a>\ntopic guide.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>The file is saved as part of saving the model in the database, so the actual\nfile name used on disk cannot be relied on until after the model has been\nsaved.</p>\n</aside>\n<p>The uploaded file’s relative URL can be obtained using the\n<a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile.url\" title=\"django.db.models.fields.files.FieldFile.url\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">url</span></code></a> attribute. Internally,\nthis calls the <a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.url\" title=\"django.core.files.storage.Storage.url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> method of the\nunderlying <a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Storage</span></code></a> class.</p>\n<p id=\"file-upload-security\">Note that whenever you deal with uploaded files, you should pay close attention\nto where you’re uploading them and what type of files they are, to avoid\nsecurity holes. <em>Validate all uploaded files</em> so that you’re sure the files are\nwhat you think they are. For example, if you blindly let somebody upload files,\nwithout validation, to a directory that’s within your web server’s document\nroot, then somebody could upload a CGI or PHP script and execute that script by\nvisiting its URL on your site. Don’t allow that.</p>\n<p>Also note that even an uploaded HTML file, since it can be executed by the\nbrowser (though not by the server), can pose security threats that are\nequivalent to XSS or CSRF attacks.</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> instances are created in your database as <code class=\"docutils literal notranslate\"><span class=\"pre\">varchar</span></code>\ncolumns with a default max length of 100 characters. As with other fields, you\ncan change the maximum length using the <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> argument.</p>\n<section id=\"filefield-and-fieldfile\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">FieldFile</span></code><a class=\"heading-anchor\" href=\"#filefield-and-fieldfile\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile\">\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\">FieldFile</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>When you access a <a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> on a model, you are\ngiven an instance of <a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile\" title=\"django.db.models.fields.files.FieldFile\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FieldFile</span></code></a> as a proxy for accessing the underlying\nfile.</p>\n<p>The API of <a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile\" title=\"django.db.models.fields.files.FieldFile\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FieldFile</span></code></a> mirrors that of <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a>,\nwith one key difference: <em>The object wrapped by the class is not necessarily a\nwrapper around Python’s built-in file object.</em> Instead, it is a wrapper around\nthe result of the <a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.open\" title=\"django.core.files.storage.Storage.open\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Storage.open()</span></code></a>\nmethod, which may be a <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> object, or it may be a\ncustom storage’s implementation of the <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> API.</p>\n<p>In addition to the API inherited from <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> such as\n<code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></code>, <a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile\" title=\"django.db.models.fields.files.FieldFile\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FieldFile</span></code></a> includes several methods that\ncan be used to interact with the underlying file:</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Two methods of this class, <a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile.save\" title=\"django.db.models.fields.files.FieldFile.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> and\n<a class=\"reference internal\" href=\"#django.db.models.fields.files.FieldFile.delete\" title=\"django.db.models.fields.files.FieldFile.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>, default to saving the model object of the\nassociated <code class=\"docutils literal notranslate\"><span class=\"pre\">FieldFile</span></code> in the database.</p>\n</aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The name of the file including the relative path from the root of the\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Storage</span></code></a> of the associated\n<a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.path\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">path</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A read-only property to access the file’s local filesystem path by calling the\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.path\" title=\"django.core.files.storage.Storage.path\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">path()</span></code></a> method of the underlying\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Storage</span></code></a> class.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.size\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">size</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>The result of the underlying <a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.size\" title=\"django.core.files.storage.Storage.size\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Storage.size()</span></code></a> method.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.url\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">url</span></span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A read-only property to access the file’s relative URL by calling the\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage.url\" title=\"django.core.files.storage.Storage.url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> method of the underlying\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Storage</span></code></a> class.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.open\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">open</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">mode</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'rb'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.open\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Opens or reopens the file associated with this instance in the specified\n<code class=\"docutils literal notranslate\"><span class=\"pre\">mode</span></code>. Unlike the standard Python <code class=\"docutils literal notranslate\"><span class=\"pre\">open()</span></code> method, it doesn’t return a\nfile descriptor.</p>\n<p>Since the underlying file is opened implicitly when accessing it, it may be\nunnecessary to call this method except to reset the pointer to the underlying\nfile or to change the <code class=\"docutils literal notranslate\"><span class=\"pre\">mode</span></code>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.close\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">close</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.close\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Behaves like the standard Python <code class=\"docutils literal notranslate\"><span class=\"pre\">file.close()</span></code> method and closes the file\nassociated with this instance.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.save\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">save</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.save\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This method takes a filename and file contents and passes them to the storage\nclass for the field, then associates the stored file with the model field.\nIf you want to manually associate file data with\n<a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> instances on your model, the <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>\nmethod is used to persist that file data.</p>\n<p>Takes two required arguments: <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> which is the name of the file, and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">content</span></code> which is an object containing the file’s contents.  The\noptional <code class=\"docutils literal notranslate\"><span class=\"pre\">save</span></code> argument controls whether or not the model instance is\nsaved after the file associated with this field has been altered. Defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Note that the <code class=\"docutils literal notranslate\"><span class=\"pre\">content</span></code> argument should be an instance of\n<a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.core.files.File</span></code></a>, not Python’s built-in file object.\nYou can construct a <a class=\"reference internal\" href=\"/en/4.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> from an existing\nPython file object 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">File</span>\n<span class=\"c1\"># Open an existing file using Python&#39;s built-in open()</span>\n<span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;/path/to/hello.world&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">myfile</span> <span class=\"o\">=</span> <span class=\"n\">File</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Or you can construct one from a Python string 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ContentFile</span>\n<span class=\"n\">myfile</span> <span class=\"o\">=</span> <span class=\"n\">ContentFile</span><span class=\"p\">(</span><span class=\"s2\">&quot;hello world&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For more information, see <a class=\"reference internal\" href=\"/en/4.0/topics/files/\"><span class=\"doc\">Managing files</span></a>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.fields.files.FieldFile.delete\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FieldFile.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">save</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.files.FieldFile.delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Deletes the file associated with this instance and clears all attributes on\nthe field. Note: This method will close the file if it happens to be open when\n<code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> is called.</p>\n<p>The optional <code class=\"docutils literal notranslate\"><span class=\"pre\">save</span></code> argument controls whether or not the model instance is\nsaved after the file associated with this field has been deleted. Defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Note that when a model is deleted, related files are not deleted. If you need\nto cleanup orphaned files, you’ll need to handle it yourself (for instance,\nwith a custom management command that can be run manually or scheduled to run\nperiodically via e.g. cron).</p>\n</section>\n</section>\n<section id=\"filepathfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code><a class=\"heading-anchor\" href=\"#filepathfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField\">\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\">FilePathField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">match</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">recursive</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_files</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\">allow_folders</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">100</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> whose choices are limited to the filenames in a certain\ndirectory on the filesystem. Has some special arguments, of which the first is\n<strong>required</strong>:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField.path\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FilePathField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">path</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField.path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Required. The absolute filesystem path to a directory from which this\n<a class=\"reference internal\" href=\"#django.db.models.FilePathField\" title=\"django.db.models.FilePathField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code></a> should get its choices. Example: <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;/home/images&quot;</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> may also be a callable, such as a function to dynamically set the\npath at runtime. 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=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<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\">def</span><span class=\"w\"> </span><span class=\"nf\">images_path</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LOCAL_FILE_DIR</span><span class=\"p\">,</span> <span class=\"s1\">&#39;images&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</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\">file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FilePathField</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">=</span><span class=\"n\">images_path</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField.match\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FilePathField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">match</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField.match\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional. A regular expression, as a string, that <a class=\"reference internal\" href=\"#django.db.models.FilePathField\" title=\"django.db.models.FilePathField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code></a>\nwill use to filter filenames. Note that the regex will be applied to the\nbase filename, not the full path. Example: <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;foo.*\\.txt$&quot;</span></code>, which will\nmatch a file called <code class=\"docutils literal notranslate\"><span class=\"pre\">foo23.txt</span></code> but not <code class=\"docutils literal notranslate\"><span class=\"pre\">bar.txt</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">foo23.png</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField.recursive\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FilePathField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">recursive</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField.recursive\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional. Either <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Default is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Specifies\nwhether all subdirectories of <a class=\"reference internal\" href=\"#django.db.models.FilePathField.path\" title=\"django.db.models.FilePathField.path\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">path</span></code></a> should be included</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField.allow_files\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FilePathField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">allow_files</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField.allow_files\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional.  Either <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.  Default is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.  Specifies\nwhether files in the specified location should be included.  Either this or\n<a class=\"reference internal\" href=\"#django.db.models.FilePathField.allow_folders\" title=\"django.db.models.FilePathField.allow_folders\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">allow_folders</span></code></a> must be <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FilePathField.allow_folders\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">FilePathField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">allow_folders</span></span><a class=\"heading-anchor\" href=\"#django.db.models.FilePathField.allow_folders\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional.  Either <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.  Default is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.  Specifies\nwhether folders in the specified location should be included.  Either this\nor <a class=\"reference internal\" href=\"#django.db.models.FilePathField.allow_files\" title=\"django.db.models.FilePathField.allow_files\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">allow_files</span></code></a> must be <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n<p>The one potential gotcha is that <a class=\"reference internal\" href=\"#django.db.models.FilePathField.match\" title=\"django.db.models.FilePathField.match\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">match</span></code></a> applies to the\nbase filename, not the full path. So, this 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\">FilePathField</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">=</span><span class=\"s2\">&quot;/home/images&quot;</span><span class=\"p\">,</span> <span class=\"n\">match</span><span class=\"o\">=</span><span class=\"s2\">&quot;foo.*&quot;</span><span class=\"p\">,</span> <span class=\"n\">recursive</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…will match <code class=\"docutils literal notranslate\"><span class=\"pre\">/home/images/foo.png</span></code> but not <code class=\"docutils literal notranslate\"><span class=\"pre\">/home/images/foo/bar.png</span></code>\nbecause the <a class=\"reference internal\" href=\"#django.db.models.FilePathField.match\" title=\"django.db.models.FilePathField.match\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">match</span></code></a> applies to the base filename\n(<code class=\"docutils literal notranslate\"><span class=\"pre\">foo.png</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">bar.png</span></code>).</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.FilePathField\" title=\"django.db.models.FilePathField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FilePathField</span></code></a> instances are created in your database as <code class=\"docutils literal notranslate\"><span class=\"pre\">varchar</span></code>\ncolumns with a default max length of 100 characters. As with other fields, you\ncan change the maximum length using the <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> argument.</p>\n</section>\n<section id=\"floatfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">FloatField</span></code><a class=\"heading-anchor\" href=\"#floatfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.FloatField\">\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\">FloatField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.FloatField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A floating-point number represented in Python by a <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> instance.</p>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NumberInput</span></code></a>\nwhen <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> or\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> otherwise.</p>\n<aside class=\"admonition-floatfield-vs-decimalfield admonition\" id=\"floatfield-vs-decimalfield\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">FloatField</span></code> vs. <code class=\"docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code></p>\n<p>The <a class=\"reference internal\" href=\"#django.db.models.FloatField\" title=\"django.db.models.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a> class is sometimes mixed up with the\n<a class=\"reference internal\" href=\"#django.db.models.DecimalField\" title=\"django.db.models.DecimalField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code></a> class. Although they both represent real numbers, they\nrepresent those numbers differently. <code class=\"docutils literal notranslate\"><span class=\"pre\">FloatField</span></code> uses Python’s <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>\ntype internally, while <code class=\"docutils literal notranslate\"><span class=\"pre\">DecimalField</span></code> uses Python’s <code class=\"docutils literal notranslate\"><span class=\"pre\">Decimal</span></code> type. For\ninformation on the difference between the two, see Python’s documentation\nfor the <a class=\"reference external\" href=\"https://docs.python.org/3/library/decimal.html#module-decimal\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">decimal</span></code></a> module.</p>\n</aside>\n</section>\n<section id=\"genericipaddressfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GenericIPAddressField</span></code><a class=\"heading-anchor\" href=\"#genericipaddressfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.GenericIPAddressField\">\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\">GenericIPAddressField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">protocol</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'both'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unpack_ipv4</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.GenericIPAddressField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>An IPv4 or IPv6 address, in string format (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">192.0.2.30</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">2a02:42fe::4</span></code>). The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>.</p>\n<p>The IPv6 address normalization follows <span class=\"target\" id=\"index-0\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc4291.html#section-2.2\"><strong>RFC 4291 Section 2.2</strong></a> section 2.2,\nincluding using the IPv4 format suggested in paragraph 3 of that section, like\n<code class=\"docutils literal notranslate\"><span class=\"pre\">::ffff:192.0.2.0</span></code>. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">2001:0::0:01</span></code> would be normalized to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">2001::1</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">::ffff:0a0a:0a0a</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">::ffff:10.10.10.10</span></code>. All characters\nare converted to lowercase.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.GenericIPAddressField.protocol\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">GenericIPAddressField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">protocol</span></span><a class=\"heading-anchor\" href=\"#django.db.models.GenericIPAddressField.protocol\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Limits valid inputs to the specified protocol.\nAccepted values are <code class=\"docutils literal notranslate\"><span class=\"pre\">'both'</span></code> (default), <code class=\"docutils literal notranslate\"><span class=\"pre\">'IPv4'</span></code>\nor <code class=\"docutils literal notranslate\"><span class=\"pre\">'IPv6'</span></code>. Matching is case insensitive.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.GenericIPAddressField.unpack_ipv4\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">GenericIPAddressField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">unpack_ipv4</span></span><a class=\"heading-anchor\" href=\"#django.db.models.GenericIPAddressField.unpack_ipv4\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Unpacks IPv4 mapped addresses like <code class=\"docutils literal notranslate\"><span class=\"pre\">::ffff:192.0.2.1</span></code>.\nIf this option is enabled that address would be unpacked to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">192.0.2.1</span></code>. Default is disabled. Can only be used\nwhen <code class=\"docutils literal notranslate\"><span class=\"pre\">protocol</span></code> is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">'both'</span></code>.</p>\n</dd></dl>\n\n<p>If you allow for blank values, you have to allow for null values since blank\nvalues are stored as null.</p>\n</section>\n<section id=\"imagefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ImageField</span></code><a class=\"heading-anchor\" href=\"#imagefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ImageField\">\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\">ImageField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">upload_to</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">height_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">width_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">100</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.ImageField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Inherits all attributes and methods from <a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>, but also\nvalidates that the uploaded object is a valid image.</p>\n<p>In addition to the special attributes that are available for <a class=\"reference internal\" href=\"#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>,\nan <a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> also has <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">width</span></code> attributes.</p>\n<p>To facilitate querying on those attributes, <a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> has two extra\noptional arguments:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ImageField.height_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ImageField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">height_field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ImageField.height_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Name of a model field which will be auto-populated with the height of the\nimage each time the model instance is saved.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ImageField.width_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ImageField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">width_field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ImageField.width_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Name of a model field which will be auto-populated with the width of the\nimage each time the model instance is saved.</p>\n</dd></dl>\n\n<p>Requires the <a class=\"reference external\" href=\"https://pillow.readthedocs.io/en/latest/\">Pillow</a> library.</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> instances are created in your database as <code class=\"docutils literal notranslate\"><span class=\"pre\">varchar</span></code>\ncolumns with a default max length of 100 characters. As with other fields, you\ncan change the maximum length using the <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> argument.</p>\n<p>The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.ClearableFileInput\" title=\"django.forms.ClearableFileInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ClearableFileInput</span></code></a>.</p>\n</section>\n<section id=\"integerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code><a class=\"heading-anchor\" href=\"#integerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.IntegerField\">\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\">IntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.IntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>An integer. Values from <code class=\"docutils literal notranslate\"><span class=\"pre\">-2147483648</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">2147483647</span></code> are safe in all\ndatabases supported by Django.</p>\n<p>It uses <a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.MinValueValidator\" title=\"django.core.validators.MinValueValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MinValueValidator</span></code></a> and\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.MaxValueValidator\" title=\"django.core.validators.MaxValueValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MaxValueValidator</span></code></a> to validate the input based\non the values that the default database supports.</p>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">NumberInput</span></code></a>\nwhen <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.Field.localize\" title=\"django.forms.Field.localize\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> or\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> otherwise.</p>\n</section>\n<section id=\"jsonfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code><a class=\"heading-anchor\" href=\"#jsonfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.JSONField\">\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\">JSONField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoder</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">decoder</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.JSONField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A field for storing JSON encoded data. In Python the data is represented in its\nPython native format: dictionaries, lists, strings, numbers, booleans and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code> is supported on MariaDB 10.2.7+, MySQL 5.7.8+, Oracle,\nPostgreSQL, and SQLite (with the <a class=\"reference internal\" href=\"/en/4.0/ref/databases/#sqlite-json1\"><span class=\"std std-ref\">JSON1 extension enabled</span></a>).</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.JSONField.encoder\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">JSONField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">encoder</span></span><a class=\"heading-anchor\" href=\"#django.db.models.JSONField.encoder\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An optional <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONEncoder\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">json.JSONEncoder</span></code></a> subclass to serialize data types\nnot supported by the standard JSON serializer (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code>\nor <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUID</span></code></a>). For example, you can use the\n<a class=\"reference internal\" href=\"/en/4.0/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code></a> class.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">json.JSONEncoder</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.JSONField.decoder\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">JSONField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">decoder</span></span><a class=\"heading-anchor\" href=\"#django.db.models.JSONField.decoder\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>An optional <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONDecoder\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">json.JSONDecoder</span></code></a> subclass to deserialize the value\nretrieved from the database. The value will be in the format chosen by the\ncustom encoder (most often a string). Your deserialization may need to\naccount for the fact that you can’t be certain of the input type. For\nexample, you run the risk of returning a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> that was actually a\nstring that just happened to be in the same format chosen for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code>s.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">json.JSONDecoder</span></code>.</p>\n</dd></dl>\n\n<p>If you give the field a <a class=\"reference internal\" href=\"#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a>, ensure it’s an\nimmutable object, such as a <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>, or a callable object that returns a fresh\nmutable object each time, such as <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> or a function. Providing a mutable\ndefault object like <code class=\"docutils literal notranslate\"><span class=\"pre\">default={}</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">default=[]</span></code> shares the one object\nbetween all model instances.</p>\n<p>To query <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code> in the database, see <a class=\"reference internal\" href=\"/en/4.0/topics/db/queries/#querying-jsonfield\"><span class=\"std std-ref\">Querying JSONField</span></a>.</p>\n<aside class=\"admonition-indexing admonition\">\n<p class=\"admonition-title\">Indexing</p>\n<p><a class=\"reference internal\" href=\"/en/4.0/ref/models/indexes/#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Index</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.db_index</span></code></a> both create a\nB-tree index, which isn’t particularly helpful when querying <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code>.\nOn PostgreSQL only, you can use\n<a class=\"reference internal\" href=\"/en/4.0/ref/contrib/postgres/indexes/#django.contrib.postgres.indexes.GinIndex\" title=\"django.contrib.postgres.indexes.GinIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GinIndex</span></code></a> that is better suited.</p>\n</aside>\n<aside class=\"admonition-postgresql-users admonition\">\n<p class=\"admonition-title\">PostgreSQL users</p>\n<p>PostgreSQL has two native JSON based data types: <code class=\"docutils literal notranslate\"><span class=\"pre\">json</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb</span></code>.\nThe main difference between them is how they are stored and how they can be\nqueried. PostgreSQL’s <code class=\"docutils literal notranslate\"><span class=\"pre\">json</span></code> field is stored as the original string\nrepresentation of the JSON and must be decoded on the fly when queried\nbased on keys. The <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb</span></code> field is stored based on the actual structure\nof the JSON which allows indexing. The trade-off is a small additional cost\non writing to the <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb</span></code> field. <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code> uses <code class=\"docutils literal notranslate\"><span class=\"pre\">jsonb</span></code>.</p>\n</aside>\n<aside class=\"admonition-oracle-users admonition\">\n<p class=\"admonition-title\">Oracle users</p>\n<p>Oracle Database does not support storing JSON scalar values. Only JSON\nobjects and arrays (represented in Python using <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">dict</span></code></a> and\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#list\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">list</span></code></a>) are supported.</p>\n</aside>\n</section>\n<section id=\"positivebigintegerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">PositiveBigIntegerField</span></code><a class=\"heading-anchor\" href=\"#positivebigintegerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.PositiveBigIntegerField\">\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\">PositiveBigIntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.PositiveBigIntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like a <a class=\"reference internal\" href=\"#django.db.models.PositiveIntegerField\" title=\"django.db.models.PositiveIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PositiveIntegerField</span></code></a>, but only allows values under a certain\n(database-dependent) point. Values from <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">9223372036854775807</span></code> are\nsafe in all databases supported by Django.</p>\n</section>\n<section id=\"positiveintegerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">PositiveIntegerField</span></code><a class=\"heading-anchor\" href=\"#positiveintegerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.PositiveIntegerField\">\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\">PositiveIntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.PositiveIntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like an <a class=\"reference internal\" href=\"#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a>, but must be either positive or zero (<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>).\nValues from <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">2147483647</span></code> are safe in all databases supported by\nDjango. The value <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> is accepted for backward compatibility reasons.</p>\n</section>\n<section id=\"positivesmallintegerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">PositiveSmallIntegerField</span></code><a class=\"heading-anchor\" href=\"#positivesmallintegerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.PositiveSmallIntegerField\">\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\">PositiveSmallIntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.PositiveSmallIntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like a <a class=\"reference internal\" href=\"#django.db.models.PositiveIntegerField\" title=\"django.db.models.PositiveIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PositiveIntegerField</span></code></a>, but only allows values under a certain\n(database-dependent) point. Values from <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">32767</span></code> are safe in all\ndatabases supported by Django.</p>\n</section>\n<section id=\"slugfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SlugField</span></code><a class=\"heading-anchor\" href=\"#slugfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SlugField\">\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\">SlugField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">50</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.SlugField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><a class=\"reference internal\" href=\"/en/4.0/glossary/#term-slug\"><span class=\"xref std std-term\">Slug</span></a> is a newspaper term. A slug is a short label for something,\ncontaining only letters, numbers, underscores or hyphens. They’re generally used\nin URLs.</p>\n<p>Like a CharField, you can specify <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> (read the note\nabout database portability and <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> in that section,\ntoo). If <a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> is not specified, Django will use a\ndefault length of 50.</p>\n<p>Implies setting <a class=\"reference internal\" href=\"#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.db_index</span></code></a> to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>It is often useful to automatically prepopulate a SlugField based on the value\nof some other value.  You can do this automatically in the admin using\n<a class=\"reference internal\" href=\"/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields\" title=\"django.contrib.admin.ModelAdmin.prepopulated_fields\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">prepopulated_fields</span></code></a>.</p>\n<p>It uses <a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.validate_slug\" title=\"django.core.validators.validate_slug\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">validate_slug</span></code></a> or\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.validate_unicode_slug\" title=\"django.core.validators.validate_unicode_slug\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">validate_unicode_slug</span></code></a> for validation.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SlugField.allow_unicode\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SlugField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">allow_unicode</span></span><a class=\"heading-anchor\" href=\"#django.db.models.SlugField.allow_unicode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, the field accepts Unicode letters in addition to ASCII\nletters. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"smallautofield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SmallAutoField</span></code><a class=\"heading-anchor\" href=\"#smallautofield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SmallAutoField\">\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\">SmallAutoField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.SmallAutoField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like an <a class=\"reference internal\" href=\"#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a>, but only allows values under a certain\n(database-dependent) limit. Values from <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">32767</span></code> are safe in all\ndatabases supported by Django.</p>\n</section>\n<section id=\"smallintegerfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SmallIntegerField</span></code><a class=\"heading-anchor\" href=\"#smallintegerfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SmallIntegerField\">\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\">SmallIntegerField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.SmallIntegerField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Like an <a class=\"reference internal\" href=\"#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a>, but only allows values under a certain\n(database-dependent) point. Values from <code class=\"docutils literal notranslate\"><span class=\"pre\">-32768</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">32767</span></code> are safe in all\ndatabases supported by Django.</p>\n</section>\n<section id=\"textfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TextField</span></code><a class=\"heading-anchor\" href=\"#textfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.TextField\">\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\">TextField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.TextField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A large text field. The default form widget for this field is a\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.Textarea\" title=\"django.forms.Textarea\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Textarea</span></code></a>.</p>\n<p>If you specify a <code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> attribute, it will be reflected in the\n<a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.Textarea\" title=\"django.forms.Textarea\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Textarea</span></code></a> widget of the auto-generated form field.\nHowever it is not enforced at the model or database level. Use a\n<a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> for that.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.TextField.db_collation\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TextField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_collation</span></span><a class=\"heading-anchor\" href=\"#django.db.models.TextField.db_collation\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"3.2\">\n<p class=\"version-note-title\">New in Django 3.2</p></aside>\n<p>The database collation name of the field.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Collation names are not standardized. As such, this will not be\nportable across multiple database backends.</p>\n</aside>\n<aside class=\"admonition-oracle admonition\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle does not support collations for a <code class=\"docutils literal notranslate\"><span class=\"pre\">TextField</span></code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"timefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TimeField</span></code><a class=\"heading-anchor\" href=\"#timefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.TimeField\">\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\">TimeField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">auto_now_add</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.TimeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A time, represented in Python by a <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.time</span></code> instance. Accepts the same\nauto-population options as <a class=\"reference internal\" href=\"#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>.</p>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.TimeInput\" title=\"django.forms.TimeInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TimeInput</span></code></a>.\nThe admin adds some JavaScript shortcuts.</p>\n</section>\n<section id=\"urlfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">URLField</span></code><a class=\"heading-anchor\" href=\"#urlfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.URLField\">\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\">URLField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.URLField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> for a URL, validated by\n<a class=\"reference internal\" href=\"/en/4.0/ref/validators/#django.core.validators.URLValidator\" title=\"django.core.validators.URLValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLValidator</span></code></a>.</p>\n<p>The default form widget for this field is a <a class=\"reference internal\" href=\"/en/4.0/ref/forms/widgets/#django.forms.URLInput\" title=\"django.forms.URLInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLInput</span></code></a>.</p>\n<p>Like all <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> subclasses, <a class=\"reference internal\" href=\"#django.db.models.URLField\" title=\"django.db.models.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a> takes the optional\n<a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> argument. If you don’t specify\n<a class=\"reference internal\" href=\"#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a>, a default of 200 is used.</p>\n</section>\n<section id=\"uuidfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code><a class=\"heading-anchor\" href=\"#uuidfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.UUIDField\">\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\">UUIDField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.UUIDField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A field for storing universally unique identifiers. Uses Python’s\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUID</span></code></a> class. When used on PostgreSQL, this stores in a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code> datatype, otherwise in a <code class=\"docutils literal notranslate\"><span class=\"pre\">char(32)</span></code>.</p>\n<p>Universally unique identifiers are a good alternative to <a class=\"reference internal\" href=\"#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a> for\n<a class=\"reference internal\" href=\"#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">primary_key</span></code></a>. The database will not generate the UUID for you, so\nit is recommended to use <a class=\"reference internal\" href=\"#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</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=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n<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\">MyUUIDModel</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=\"nb\">id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UUIDField</span><span class=\"p\">(</span><span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">,</span> <span class=\"n\">editable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"c1\"># other fields</span>\n</code></pre></div>\n<p>Note that a callable (with the parentheses omitted) is passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>,\nnot an instance of <code class=\"docutils literal notranslate\"><span class=\"pre\">UUID</span></code>.</p>\n<aside class=\"admonition-lookups-on-postgresql admonition\">\n<p class=\"admonition-title\">Lookups on PostgreSQL</p>\n<p>Using <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iexact</span></code></a>, <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a>, <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>,\n<a class=\"reference internal\" href=\"/en/4.0/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=\"/en/4.0/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">istartswith</span></code></a>, <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#std-fieldlookup-endswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">endswith</span></code></a>, or\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iendswith</span></code></a> lookups on PostgreSQL don’t work for values without\nhyphens, because PostgreSQL stores them in a hyphenated uuid datatype type.</p>\n</aside>\n</section>\n</section>\n<section id=\"module-django.db.models.fields.related\">\n<span id=\"relationship-fields\"></span><h2>Relationship fields<a class=\"heading-anchor\" href=\"#module-django.db.models.fields.related\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django also defines a set of fields that represent relations.</p>\n<section id=\"foreignkey\">\n<span id=\"ref-foreignkey\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code><a class=\"heading-anchor\" href=\"#foreignkey\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey\">\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\">ForeignKey</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">to</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">on_delete</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A many-to-one relationship. Requires two positional arguments: the class to\nwhich the model is related and the <a class=\"reference internal\" href=\"#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> option.</p>\n<p id=\"recursive-relationships\">To create a recursive relationship – an object that has a many-to-one\nrelationship with itself – use <code class=\"docutils literal notranslate\"><span class=\"pre\">models.ForeignKey('self',</span>\n<span class=\"pre\">on_delete=models.CASCADE)</span></code>.</p>\n<p id=\"lazy-relationships\">If you need to create a relationship on a model that has not yet been defined,\nyou can use the name of the model, rather than the model object itself:</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\">Car</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\">manufacturer</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;Manufacturer&#39;</span><span class=\"p\">,</span>\n        <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=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Manufacturer</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=\"k\">pass</span>\n</code></pre></div>\n<p>Relationships defined this way on <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#abstract-base-classes\"><span class=\"std std-ref\">abstract models</span></a> are resolved when the model is subclassed as a\nconcrete model and are not relative to the abstract model’s <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">products/models.py</span></code></figcaption>\n<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\">AbstractCar</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\">manufacturer</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=\"s1\">&#39;Manufacturer&#39;</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\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">production/models.py</span></code></figcaption>\n<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<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">products.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AbstractCar</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Manufacturer</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=\"k\">pass</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Car</span><span class=\"p\">(</span><span class=\"n\">AbstractCar</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"c1\"># Car.manufacturer will point to `production.Manufacturer` here.</span>\n</code></pre></figure>\n<p>To refer to models defined in another application, you can explicitly specify\na model with the full application label. For example, if the <code class=\"docutils literal notranslate\"><span class=\"pre\">Manufacturer</span></code>\nmodel above is defined in another application called <code class=\"docutils literal notranslate\"><span class=\"pre\">production</span></code>, you’d\nneed to use:</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\">Car</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\">manufacturer</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;production.Manufacturer&#39;</span><span class=\"p\">,</span>\n        <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=\"p\">)</span>\n</code></pre></div>\n<p>This sort of reference, called a lazy relationship, can be useful when\nresolving circular import dependencies between two applications.</p>\n<p>A database index is automatically created on the <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>. You can\ndisable this by setting <a class=\"reference internal\" href=\"#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_index</span></code></a> to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.  You may want to\navoid the overhead of an index if you are creating a foreign key for\nconsistency rather than joins, or if you will be creating an alternative index\nlike a partial or multiple column index.</p>\n<section id=\"database-representation\">\n<h4>Database Representation<a class=\"heading-anchor\" href=\"#database-representation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Behind the scenes, Django appends <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;_id&quot;</span></code> to the field name to create its\ndatabase column name. In the above example, the database table for the <code class=\"docutils literal notranslate\"><span class=\"pre\">Car</span></code>\nmodel will have a <code class=\"docutils literal notranslate\"><span class=\"pre\">manufacturer_id</span></code> column. (You can change this explicitly by\nspecifying <a class=\"reference internal\" href=\"#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_column</span></code></a>) However, your code should never have to\ndeal with the database column name, unless you write custom SQL. You’ll always\ndeal with the field names of your model object.</p>\n</section>\n<section id=\"arguments\">\n<span id=\"foreign-key-arguments\"></span><h4>Arguments<a class=\"heading-anchor\" href=\"#arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a class=\"reference internal\" href=\"#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> accepts other arguments that define the details of how the\nrelation works.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.on_delete\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">on_delete</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.on_delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When an object referenced by a <a class=\"reference internal\" href=\"#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> is deleted, Django will\nemulate the behavior of the SQL constraint specified by the\n<a class=\"reference internal\" href=\"#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. For example, if you have a nullable\n<a class=\"reference internal\" href=\"#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> and you want it to be set null when the referenced\nobject is deleted:</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\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n    <span class=\"n\">User</span><span class=\"p\">,</span>\n    <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET_NULL</span><span class=\"p\">,</span>\n    <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">on_delete</span></code> doesn’t create an SQL constraint in the database. Support for\ndatabase-level cascade options <a class=\"extlink-ticket reference external\" href=\"https://code.djangoproject.com/ticket/21961\">may be implemented later</a>.</p>\n</dd></dl>\n\n<p>The possible values for <a class=\"reference internal\" href=\"#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> are found in\n<a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#module-django.db.models\" title=\"django.db.models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code></a>:</p>\n<ul>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.CASCADE\">\n<span class=\"sig-name descname\"><span class=\"pre\">CASCADE</span></span><a class=\"heading-anchor\" href=\"#django.db.models.CASCADE\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cascade deletes. Django emulates the behavior of the SQL constraint ON\nDELETE CASCADE and also deletes the object containing the ForeignKey.</p>\n<p><a class=\"reference internal\" href=\"/en/4.0/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\">Model.delete()</span></code></a> isn’t called on related models, but the\n<a class=\"reference internal\" href=\"/en/4.0/ref/signals/#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_delete</span></code></a> and\n<a class=\"reference internal\" href=\"/en/4.0/ref/signals/#django.db.models.signals.post_delete\" title=\"django.db.models.signals.post_delete\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_delete</span></code></a> signals are sent for all\ndeleted objects.</p>\n</dd></dl>\n\n</li>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.PROTECT\">\n<span class=\"sig-name descname\"><span class=\"pre\">PROTECT</span></span><a class=\"heading-anchor\" href=\"#django.db.models.PROTECT\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Prevent deletion of the referenced object by raising\n<a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.models.ProtectedError\" title=\"django.db.models.ProtectedError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ProtectedError</span></code></a>, a subclass of\n<a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.db.IntegrityError</span></code></a>.</p>\n</dd></dl>\n\n</li>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.RESTRICT\">\n<span class=\"sig-name descname\"><span class=\"pre\">RESTRICT</span></span><a class=\"heading-anchor\" href=\"#django.db.models.RESTRICT\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Prevent deletion of the referenced object by raising\n<a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.models.RestrictedError\" title=\"django.db.models.RestrictedError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">RestrictedError</span></code></a> (a subclass of\n<a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.db.IntegrityError</span></code></a>). Unlike <a class=\"reference internal\" href=\"#django.db.models.PROTECT\" title=\"django.db.models.PROTECT\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">PROTECT</span></code></a>, deletion of the\nreferenced object is allowed if it also references a different object\nthat is being deleted in the same operation, but via a <a class=\"reference internal\" href=\"#django.db.models.CASCADE\" title=\"django.db.models.CASCADE\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">CASCADE</span></code></a>\nrelationship.</p>\n<p>Consider this set of models:</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\">Artist</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\">10</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Album</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\">artist</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\">Artist</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Song</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\">artist</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\">Artist</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\">album</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\">Album</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\">RESTRICT</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Artist</span></code> can be deleted even if that implies deleting an <code class=\"docutils literal notranslate\"><span class=\"pre\">Album</span></code>\nwhich is referenced by a <code class=\"docutils literal notranslate\"><span class=\"pre\">Song</span></code>, because <code class=\"docutils literal notranslate\"><span class=\"pre\">Song</span></code> also references\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Artist</span></code> itself through a cascading relationship. 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\">artist_one</span> <span class=\"o\">=</span> <span class=\"n\">Artist</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=\"s1\">&#39;artist one&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">artist_two</span> <span class=\"o\">=</span> <span class=\"n\">Artist</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=\"s1\">&#39;artist two&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">album_one</span> <span class=\"o\">=</span> <span class=\"n\">Album</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\">artist</span><span class=\"o\">=</span><span class=\"n\">artist_one</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">album_two</span> <span class=\"o\">=</span> <span class=\"n\">Album</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\">artist</span><span class=\"o\">=</span><span class=\"n\">artist_two</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">song_one</span> <span class=\"o\">=</span> <span class=\"n\">Song</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\">artist</span><span class=\"o\">=</span><span class=\"n\">artist_one</span><span class=\"p\">,</span> <span class=\"n\">album</span><span class=\"o\">=</span><span class=\"n\">album_one</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">song_two</span> <span class=\"o\">=</span> <span class=\"n\">Song</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\">artist</span><span class=\"o\">=</span><span class=\"n\">artist_one</span><span class=\"p\">,</span> <span class=\"n\">album</span><span class=\"o\">=</span><span class=\"n\">album_two</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">album_one</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\"># Raises RestrictedError.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">artist_two</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\"># Raises RestrictedError.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">artist_one</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(4, {&#39;Song&#39;: 2, &#39;Album&#39;: 1, &#39;Artist&#39;: 1})</span>\n</code></pre></div>\n</dd></dl>\n\n</li>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SET_NULL\">\n<span class=\"sig-name descname\"><span class=\"pre\">SET_NULL</span></span><a class=\"heading-anchor\" href=\"#django.db.models.SET_NULL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Set the <a class=\"reference internal\" href=\"#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> null; this is only possible if\n<a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n</li>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SET_DEFAULT\">\n<span class=\"sig-name descname\"><span class=\"pre\">SET_DEFAULT</span></span><a class=\"heading-anchor\" href=\"#django.db.models.SET_DEFAULT\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Set the <a class=\"reference internal\" href=\"#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> to its default value; a default for the\n<a class=\"reference internal\" href=\"#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> must be set.</p>\n</dd></dl>\n\n</li>\n<li><dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.SET\">\n<span class=\"sig-name descname\"><span class=\"pre\">SET</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.SET\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Set the <a class=\"reference internal\" href=\"#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> to the value passed to\n<a class=\"reference internal\" href=\"#django.db.models.SET\" title=\"django.db.models.SET\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">SET()</span></code></a>, or if a callable is passed in,\nthe result of calling it. In most cases, passing a callable will be\nnecessary to avoid executing queries at the time your models.py is\nimported:</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_user_model</span>\n<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\">def</span><span class=\"w\"> </span><span class=\"nf\">get_sentinel_user</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"n\">get_user_model</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;deleted&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</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\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET</span><span class=\"p\">(</span><span class=\"n\">get_sentinel_user</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</li>\n<li><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.DO_NOTHING\">\n<span class=\"sig-name descname\"><span class=\"pre\">DO_NOTHING</span></span><a class=\"heading-anchor\" href=\"#django.db.models.DO_NOTHING\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Take no action. If your database backend enforces referential\nintegrity, this will cause an <a class=\"reference internal\" href=\"/en/4.0/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code></a> unless\nyou manually add an SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">ON</span> <span class=\"pre\">DELETE</span></code> constraint to the database field.</p>\n</dd></dl>\n\n</li>\n</ul>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.limit_choices_to\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">limit_choices_to</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.limit_choices_to\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Sets a limit to the available choices for this field when this field is\nrendered using a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> or the admin (by default, all objects\nin the queryset are available to choose). Either a dictionary, a\n<a class=\"reference internal\" href=\"/en/4.0/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></code></a> object, or a callable returning a\ndictionary or <a class=\"reference internal\" href=\"/en/4.0/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></code></a> object can be used.</p>\n<p>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\">staff_member</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n    <span class=\"n\">User</span><span class=\"p\">,</span>\n    <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\">limit_choices_to</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;is_staff&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>causes the corresponding field on the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> to list only <code class=\"docutils literal notranslate\"><span class=\"pre\">Users</span></code>\nthat have <code class=\"docutils literal notranslate\"><span class=\"pre\">is_staff=True</span></code>. This may be helpful in the Django admin.</p>\n<p>The callable form can be helpful, for instance, when used in conjunction\nwith the Python <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> module to limit selections by date range. For\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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">limit_pub_date_choices</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s1\">&#39;pub_date__lte&#39;</span><span class=\"p\">:</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\n<span class=\"n\">limit_choices_to</span> <span class=\"o\">=</span> <span class=\"n\">limit_pub_date_choices</span>\n</code></pre></div>\n<p>If <code class=\"docutils literal notranslate\"><span class=\"pre\">limit_choices_to</span></code> is or returns a <a class=\"reference internal\" href=\"/en/4.0/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\">object</span></code></a>, which is useful for <a class=\"reference internal\" href=\"/en/4.0/topics/db/queries/#complex-lookups-with-q\"><span class=\"std std-ref\">complex queries</span></a>, then it will only have an effect on the choices\navailable in the admin when the field is not listed in\n<a class=\"reference internal\" href=\"/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields\" title=\"django.contrib.admin.ModelAdmin.raw_id_fields\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code></a> in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> for the model.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>If a callable is used for <code class=\"docutils literal notranslate\"><span class=\"pre\">limit_choices_to</span></code>, it will be invoked\nevery time a new form is instantiated. It may also be invoked when a\nmodel is validated, for example by management commands or the admin.\nThe admin constructs querysets to validate its form inputs in various\nedge cases multiple times, so there is a possibility your callable may\nbe invoked several times.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.related_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">related_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.related_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The name to use for the relation from the related object back to this one.\nIt’s also the default value for <a class=\"reference internal\" href=\"#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_query_name</span></code></a> (the name to use\nfor the reverse filter name from the target model). See the <a class=\"reference internal\" href=\"/en/4.0/topics/db/queries/#backwards-related-objects\"><span class=\"std std-ref\">related\nobjects documentation</span></a> for a full explanation\nand example. Note that you must set this value when defining relations on\n<a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#abstract-base-classes\"><span class=\"std std-ref\">abstract models</span></a>; and when you do so\n<a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#abstract-related-name\"><span class=\"std std-ref\">some special syntax</span></a> is available.</p>\n<p>If you’d prefer Django not to create a backwards relation, set\n<code class=\"docutils literal notranslate\"><span class=\"pre\">related_name</span></code> to <code class=\"docutils literal notranslate\"><span class=\"pre\">'+'</span></code> or end it with <code class=\"docutils literal notranslate\"><span class=\"pre\">'+'</span></code>. For example, this will\nensure that the <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> model won’t have a backwards relation to this\nmodel:</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\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n    <span class=\"n\">User</span><span class=\"p\">,</span>\n    <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\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.related_query_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">related_query_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.related_query_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The name to use for the reverse filter name from the target model. It\ndefaults to the value of <a class=\"reference internal\" href=\"#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> or\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/options/#django.db.models.Options.default_related_name\" title=\"django.db.models.Options.default_related_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default_related_name</span></code></a> if set, otherwise it\ndefaults to the name of the model:</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\"># Declare the ForeignKey with related_query_name</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Tag</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\">article</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">Article</span><span class=\"p\">,</span>\n        <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\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;tags&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;tag&quot;</span><span class=\"p\">,</span>\n    <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\">255</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># That&#39;s now the name of the reverse filter</span>\n<span class=\"n\">Article</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\">tag__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;important&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Like <a class=\"reference internal\" href=\"#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>, <code class=\"docutils literal notranslate\"><span class=\"pre\">related_query_name</span></code> supports app label and\nclass interpolation via <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#abstract-related-name\"><span class=\"std std-ref\">some special syntax</span></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.to_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">to_field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.to_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The field on the related object that the relation is to. By default, Django\nuses the primary key of the related object. If you reference a different\nfield, that field must have <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.db_constraint\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_constraint</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.db_constraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Controls whether or not a constraint should be created in the database for\nthis foreign key. The default is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, and that’s almost certainly what\nyou want; setting this to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> can be very bad for data integrity.\nThat said, here are some scenarios where you might want to do this:</p>\n<ul class=\"simple\">\n<li><p>You have legacy data that is not valid.</p></li>\n<li><p>You’re sharding your database.</p></li>\n</ul>\n<p>If this is set to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, accessing a related object that doesn’t exist\nwill raise its <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code> exception.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ForeignKey.swappable\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ForeignKey.</span></span><span class=\"sig-name descname\"><span class=\"pre\">swappable</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ForeignKey.swappable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Controls the migration framework’s reaction if this <a class=\"reference internal\" href=\"#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>\nis pointing at a swappable model. If it is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> - the default -\nthen if the <a class=\"reference internal\" href=\"#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> is pointing at a model which matches\nthe current value of <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.AUTH_USER_MODEL</span></code> (or another swappable\nmodel setting) the relationship will be stored in the migration using\na reference to the setting, not to the model directly.</p>\n<p>You only want to override this to be <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> if you are sure your\nmodel should always point toward the swapped-in model - for example,\nif it is a profile model designed specifically for your custom user model.</p>\n<p>Setting it to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> does not mean you can reference a swappable model\neven if it is swapped out - <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> means that the migrations made\nwith this ForeignKey will always reference the exact model you specify\n(so it will fail hard if the user tries to run with a User model you don’t\nsupport, for example).</p>\n<p>If in doubt, leave it to its default of <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"manytomanyfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code><a class=\"heading-anchor\" href=\"#manytomanyfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField\">\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\">ManyToManyField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">to</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A many-to-many relationship. Requires a positional argument: the class to\nwhich the model is related, which works exactly the same as it does for\n<a class=\"reference internal\" href=\"#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>, including <a class=\"reference internal\" href=\"#recursive-relationships\"><span class=\"std std-ref\">recursive</span></a> and\n<a class=\"reference internal\" href=\"#lazy-relationships\"><span class=\"std std-ref\">lazy</span></a> relationships.</p>\n<p>Related objects can be added, removed, or created with the field’s\n<a class=\"reference internal\" href=\"/en/4.0/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>.</p>\n<section id=\"id1\">\n<h4>Database Representation<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Behind the scenes, Django creates an intermediary join table to represent the\nmany-to-many relationship. By default, this table name is generated using the\nname of the many-to-many field and the name of the table for the model that\ncontains it. Since some databases don’t support table names above a certain\nlength, these table names will be automatically truncated and a uniqueness hash\nwill be used, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">author_books_9cdf</span></code>. You can manually provide the name of\nthe join table using the <a class=\"reference internal\" href=\"#django.db.models.ManyToManyField.db_table\" title=\"django.db.models.ManyToManyField.db_table\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">db_table</span></code></a> option.</p>\n</section>\n<section id=\"manytomany-arguments\">\n<span id=\"id2\"></span><h4>Arguments<a class=\"heading-anchor\" href=\"#manytomany-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a class=\"reference internal\" href=\"#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> accepts an extra set of arguments – all optional –\nthat control how the relationship functions.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.related_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">related_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.related_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#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\">ForeignKey.related_name</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.related_query_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">related_query_name</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.related_query_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ForeignKey.related_query_name</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.limit_choices_to\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">limit_choices_to</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.limit_choices_to\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as <a class=\"reference internal\" href=\"#django.db.models.ForeignKey.limit_choices_to\" title=\"django.db.models.ForeignKey.limit_choices_to\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ForeignKey.limit_choices_to</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.symmetrical\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">symmetrical</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.symmetrical\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Only used in the definition of ManyToManyFields on self. Consider the\nfollowing model:</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\">Person</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\">friends</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=\"s2\">&quot;self&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>When Django processes this model, it identifies that it has a\n<a class=\"reference internal\" href=\"#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> on itself, and as a result, it doesn’t add a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">person_set</span></code> attribute to the <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> class. Instead, the\n<a class=\"reference internal\" href=\"#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> is assumed to be symmetrical – that is, if I am\nyour friend, then you are my friend.</p>\n<p>If you do not want symmetry in many-to-many relationships with <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code>, set\n<a class=\"reference internal\" href=\"#django.db.models.ManyToManyField.symmetrical\" title=\"django.db.models.ManyToManyField.symmetrical\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">symmetrical</span></code></a> to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. This will force Django to\nadd the descriptor for the reverse relationship, allowing\n<a class=\"reference internal\" href=\"#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> relationships to be non-symmetrical.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.through\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">through</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.through\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django will automatically generate a table to manage many-to-many\nrelationships. However, if you want to manually specify the intermediary\ntable, you can use the <a class=\"reference internal\" href=\"#django.db.models.ManyToManyField.through\" title=\"django.db.models.ManyToManyField.through\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">through</span></code></a> option to specify\nthe Django model that represents the intermediate table that you want to\nuse.</p>\n<p>The most common use for this option is when you want to associate\n<a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#intermediary-manytomany\"><span class=\"std std-ref\">extra data with a many-to-many relationship</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>If you don’t want multiple associations between the same instances, add\na <a class=\"reference internal\" href=\"/en/4.0/ref/models/constraints/#django.db.models.UniqueConstraint\" title=\"django.db.models.UniqueConstraint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code></a> including the from and to\nfields. Django’s automatically generated many-to-many tables include\nsuch a constraint.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Recursive relationships using an intermediary model can’t determine the\nreverse accessors names, as they would be the same. You need to set a\n<a class=\"reference internal\" href=\"#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> to at least one of them. If you’d\nprefer Django not to create a backwards relation, set <code class=\"docutils literal notranslate\"><span class=\"pre\">related_name</span></code>\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">'+'</span></code>.</p>\n</aside>\n<p>If you don’t specify an explicit <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code> model, there is still an\nimplicit <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code> model class you can use to directly access the table\ncreated to hold the association. It has three fields to link the models.</p>\n<p>If the source and target models differ, the following fields are\ngenerated:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>: the primary key of the relation.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;containing_model&gt;_id</span></code>: the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> of the model that declares the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;other_model&gt;_id</span></code>: the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> of the model that the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> points to.</p></li>\n</ul>\n<p>If the <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> points from and to the same model, the following\nfields are generated:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code>: the primary key of the relation.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">from_&lt;model&gt;_id</span></code>: the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> of the instance which points at the\nmodel (i.e. the source instance).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_&lt;model&gt;_id</span></code>: the <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> of the instance to which the relationship\npoints (i.e. the target model instance).</p></li>\n</ul>\n<p>This class can be used to query associated records for a given model\ninstance like a normal model:</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\">Model</span><span class=\"o\">.</span><span class=\"n\">m2mfield</span><span class=\"o\">.</span><span class=\"n\">through</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</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.through_fields\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">through_fields</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.through_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Only used when a custom intermediary model is specified. Django will\nnormally determine which fields of the intermediary model to use in order\nto establish a many-to-many relationship automatically. However,\nconsider the following models:</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\">Person</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\">50</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Group</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\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">members</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"n\">Person</span><span class=\"p\">,</span>\n        <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;Membership&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;person&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Membership</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\">group</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\">Group</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\">person</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\">Person</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\">inviter</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">Person</span><span class=\"p\">,</span>\n        <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\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;membership_invites&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">invite_reason</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\">64</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Membership</span></code> has <em>two</em> foreign keys to <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">person</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">inviter</span></code>), which makes the relationship ambiguous and Django can’t know\nwhich one to use. In this case, you must explicitly specify which\nforeign keys Django should use using <code class=\"docutils literal notranslate\"><span class=\"pre\">through_fields</span></code>, as in the example\nabove.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">through_fields</span></code> accepts a 2-tuple <code class=\"docutils literal notranslate\"><span class=\"pre\">('field1',</span> <span class=\"pre\">'field2')</span></code>, where\n<code class=\"docutils literal notranslate\"><span class=\"pre\">field1</span></code> is the name of the foreign key to the model the\n<a class=\"reference internal\" href=\"#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> is defined on (<code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> in this case), and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">field2</span></code> the name of the foreign key to the target model (<code class=\"docutils literal notranslate\"><span class=\"pre\">person</span></code>\nin this case).</p>\n<p>When you have more than one foreign key on an intermediary model to any\n(or even both) of the models participating in a many-to-many relationship,\nyou <em>must</em> specify <code class=\"docutils literal notranslate\"><span class=\"pre\">through_fields</span></code>. This also applies to\n<a class=\"reference internal\" href=\"#recursive-relationships\"><span class=\"std std-ref\">recursive relationships</span></a>\nwhen an intermediary model is used and there are more than two\nforeign keys to the model, or you want to explicitly specify which two\nDjango should use.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.db_table\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_table</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.db_table\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The name of the table to create for storing the many-to-many data. If this\nis not provided, Django will assume a default name based upon the names of:\nthe table for the model defining the relationship and the name of the field\nitself.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.db_constraint\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">db_constraint</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.db_constraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Controls whether or not constraints should be created in the database for\nthe foreign keys in the intermediary table. The default is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, and\nthat’s almost certainly what you want; setting this to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> can be\nvery bad for data integrity. That said, here are some scenarios where you\nmight want to do this:</p>\n<ul class=\"simple\">\n<li><p>You have legacy data that is not valid.</p></li>\n<li><p>You’re sharding your database.</p></li>\n</ul>\n<p>It is an error to pass both <code class=\"docutils literal notranslate\"><span class=\"pre\">db_constraint</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ManyToManyField.swappable\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ManyToManyField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">swappable</span></span><a class=\"heading-anchor\" href=\"#django.db.models.ManyToManyField.swappable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Controls the migration framework’s reaction if this <a class=\"reference internal\" href=\"#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>\nis pointing at a swappable model. If it is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> - the default -\nthen if the <a class=\"reference internal\" href=\"#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> is pointing at a model which matches\nthe current value of <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.AUTH_USER_MODEL</span></code> (or another swappable\nmodel setting) the relationship will be stored in the migration using\na reference to the setting, not to the model directly.</p>\n<p>You only want to override this to be <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> if you are sure your\nmodel should always point toward the swapped-in model - for example,\nif it is a profile model designed specifically for your custom user model.</p>\n<p>If in doubt, leave it to its default of <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n<p><a class=\"reference internal\" href=\"#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> does not support <a class=\"reference internal\" href=\"#django.db.models.Field.validators\" title=\"django.db.models.Field.validators\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">validators</span></code></a>.</p>\n<p><a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> has no effect since there is no way to require a\nrelationship at the database level.</p>\n</section>\n</section>\n<section id=\"onetoonefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code><a class=\"heading-anchor\" href=\"#onetoonefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.OneToOneField\">\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\">OneToOneField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">to</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">on_delete</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">parent_link</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.OneToOneField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A one-to-one relationship. Conceptually, this is similar to a\n<a class=\"reference internal\" href=\"#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> with <a class=\"reference internal\" href=\"#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique=True</span></code></a>, but the\n“reverse” side of the relation will directly return a single object.</p>\n<p>This is most useful as the primary key of a model which “extends”\nanother model in some way; <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">Multi-table inheritance</span></a> is\nimplemented by adding an implicit one-to-one relation from the child\nmodel to the parent model, for example.</p>\n<p>One positional argument is required: the class to which the model will be\nrelated. This works exactly the same as it does for <a class=\"reference internal\" href=\"#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>,\nincluding all the options regarding <a class=\"reference internal\" href=\"#recursive-relationships\"><span class=\"std std-ref\">recursive</span></a>\nand <a class=\"reference internal\" href=\"#lazy-relationships\"><span class=\"std std-ref\">lazy</span></a> relationships.</p>\n<p>If you do not specify the <a class=\"reference internal\" href=\"#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> argument for the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>, Django will use the lowercase name of the current model as\ndefault value.</p>\n<p>With the following 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<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\">MySpecialUser</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\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span>\n        <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=\"p\">)</span>\n    <span class=\"n\">supervisor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span>\n        <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\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervisor_of&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>your resulting <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> model will have the following attributes:</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\">user</span> <span class=\"o\">=</span> <span class=\"n\">User</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=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;myspecialuser&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;supervisor_of&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">RelatedObjectDoesNotExist</span></code> exception is raised when accessing the reverse\nrelationship if an entry in the related table doesn’t exist. This is a subclass\nof the target model’s <a class=\"reference internal\" href=\"/en/4.0/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Model.DoesNotExist</span></code></a> exception. For example, if a user\ndoesn’t have a supervisor designated by <code class=\"docutils literal notranslate\"><span class=\"pre\">MySpecialUser</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\">user</span><span class=\"o\">.</span><span class=\"n\">supervisor_of</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"w\">    </span><span class=\"o\">...</span>\n<span class=\"gr\">RelatedObjectDoesNotExist</span>: <span class=\"n\">User has no supervisor_of.</span>\n</code></pre></div>\n<p id=\"onetoone-arguments\">Additionally, <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> accepts all of the extra arguments\naccepted by <a class=\"reference internal\" href=\"#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>, plus one extra argument:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.OneToOneField.parent_link\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">OneToOneField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">parent_link</span></span><a class=\"heading-anchor\" href=\"#django.db.models.OneToOneField.parent_link\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>When <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> and used in a model which inherits from another\n<a class=\"reference internal\" href=\"/en/4.0/glossary/#term-concrete-model\"><span class=\"xref std std-term\">concrete model</span></a>, indicates that this field should be used as the\nlink back to the parent class, rather than the extra\n<code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> which would normally be implicitly created by\nsubclassing.</p>\n</dd></dl>\n\n<p>See <a class=\"reference internal\" href=\"/en/4.0/topics/db/examples/one_to_one/\"><span class=\"doc\">One-to-one relationships</span></a> for usage\nexamples of <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>.</p>\n</section>\n</section>\n<section id=\"field-api-reference\">\n<h2>Field API reference<a class=\"heading-anchor\" href=\"#field-api-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field\">\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\">Field</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> is an abstract class that represents a database table column.\nDjango uses fields to create the database table (<a class=\"reference internal\" href=\"#django.db.models.Field.db_type\" title=\"django.db.models.Field.db_type\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">db_type()</span></code></a>), to map\nPython types to database (<a class=\"reference internal\" href=\"#django.db.models.Field.get_prep_value\" title=\"django.db.models.Field.get_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_prep_value()</span></code></a>) and vice-versa\n(<a class=\"reference internal\" href=\"#django.db.models.Field.from_db_value\" title=\"django.db.models.Field.from_db_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">from_db_value()</span></code></a>).</p>\n<p>A field is thus a fundamental piece in different Django APIs, notably,\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">models</span></code></a> and <a class=\"reference internal\" href=\"/en/4.0/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\">querysets</span></code></a>.</p>\n<p>In models, a field is instantiated as a class attribute and represents a\nparticular table column, see <a class=\"reference internal\" href=\"/en/4.0/topics/db/models/\"><span class=\"doc\">Models</span></a>. It has attributes\nsuch as <a class=\"reference internal\" href=\"#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique</span></code></a>, and methods that Django uses to\nmap the field value to database-specific values.</p>\n<p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> is a subclass of\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/lookups/#django.db.models.lookups.RegisterLookupMixin\" title=\"django.db.models.lookups.RegisterLookupMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RegisterLookupMixin</span></code></a> and thus both\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/lookups/#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a> and\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/lookups/#django.db.models.Lookup\" title=\"django.db.models.Lookup\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Lookup</span></code></a> can be registered on it to be used\nin <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">field_name__exact=&quot;foo&quot;</span></code>). All <a class=\"reference internal\" href=\"/en/4.0/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">built-in\nlookups</span></a> are registered by default.</p>\n<p>All of Django’s built-in fields, such as <a class=\"reference internal\" href=\"#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, are particular\nimplementations of <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code>. If you need a custom field, you can either\nsubclass any of the built-in fields or write a <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> from scratch. In\neither case, see <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/\"><span class=\"doc\">How to create custom model fields</span></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.description\">\n<span class=\"sig-name descname\"><span class=\"pre\">description</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.description\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A verbose description of the field, e.g. for the\n<a class=\"reference internal\" href=\"/en/4.0/ref/contrib/admin/admindocs/#module-django.contrib.admindocs\" title=\"django.contrib.admindocs: Django's admin documentation generator.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admindocs</span></code></a> application.</p>\n<p>The description can be of the form:</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\">description</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;String (up to </span><span class=\"si\">%(max_length)s</span><span class=\"s2\">)&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>where the arguments are interpolated from the field’s <code class=\"docutils literal notranslate\"><span class=\"pre\">__dict__</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.descriptor_class\">\n<span class=\"sig-name descname\"><span class=\"pre\">descriptor_class</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.descriptor_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A class implementing the <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#descriptors\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">descriptor protocol</span></a>\nthat is instantiated and assigned to the model instance attribute. The\nconstructor must accept a single argument, the <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> instance.\nOverriding this class attribute allows for customizing the get and set\nbehavior.</p>\n</dd></dl>\n\n<p>To map a <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> to a database-specific type, Django exposes several\nmethods:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.get_internal_type\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_internal_type</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.get_internal_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a string naming this field for backend specific purposes.\nBy default, it returns the class name.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#emulating-built-in-field-types\"><span class=\"std std-ref\">Emulating built-in field types</span></a> for usage in custom fields.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.db_type\">\n<span class=\"sig-name descname\"><span class=\"pre\">db_type</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.db_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the database column data type for the <a class=\"reference internal\" href=\"#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>, taking\ninto account the <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#custom-database-types\"><span class=\"std std-ref\">Custom database types</span></a> for usage in custom fields.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.rel_db_type\">\n<span class=\"sig-name descname\"><span class=\"pre\">rel_db_type</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.rel_db_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the database column data type for fields such as <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> that point to the <a class=\"reference internal\" href=\"#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>, taking\ninto account the <code class=\"docutils literal notranslate\"><span class=\"pre\">connection</span></code>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#custom-database-types\"><span class=\"std std-ref\">Custom database types</span></a> for usage in custom fields.</p>\n</dd></dl>\n\n<p>There are three main situations where Django needs to interact with the\ndatabase backend and fields:</p>\n<ul class=\"simple\">\n<li><p>when it queries the database (Python value -&gt; database backend value)</p></li>\n<li><p>when it loads data from the database (database backend value -&gt; Python\nvalue)</p></li>\n<li><p>when it saves to the database (Python value -&gt; database backend value)</p></li>\n</ul>\n<p>When querying, <a class=\"reference internal\" href=\"#django.db.models.Field.get_db_prep_value\" title=\"django.db.models.Field.get_db_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_db_prep_value()</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.Field.get_prep_value\" title=\"django.db.models.Field.get_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_prep_value()</span></code></a> are used:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.get_prep_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_prep_value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.get_prep_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> is the current value of the model’s attribute, and the method\nshould return data in a format that has been prepared for use as a\nparameter in a query.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#converting-python-objects-to-query-values\"><span class=\"std std-ref\">Converting Python objects to query values</span></a> for usage.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.get_db_prep_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_db_prep_value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">prepared</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.Field.get_db_prep_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Converts <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> to a backend-specific value. By default it returns\n<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> if <code class=\"docutils literal notranslate\"><span class=\"pre\">prepared=True</span></code> and <a class=\"reference internal\" href=\"#django.db.models.Field.get_prep_value\" title=\"django.db.models.Field.get_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_prep_value()</span></code></a> if is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#converting-query-values-to-database-values\"><span class=\"std std-ref\">Converting query values to database values</span></a> for usage.</p>\n</dd></dl>\n\n<p>When loading data, <a class=\"reference internal\" href=\"#django.db.models.Field.from_db_value\" title=\"django.db.models.Field.from_db_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">from_db_value()</span></code></a> is used:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.from_db_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">from_db_value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.from_db_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Converts a value as returned by the database to a Python object. It is\nthe reverse of <a class=\"reference internal\" href=\"#django.db.models.Field.get_prep_value\" title=\"django.db.models.Field.get_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_prep_value()</span></code></a>.</p>\n<p>This method is not used for most built-in fields as the database\nbackend already returns the correct Python type, or the backend itself\ndoes the conversion.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">expression</span></code> is the same as <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#converting-values-to-python-objects\"><span class=\"std std-ref\">Converting values to Python objects</span></a> for usage.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>For performance reasons, <code class=\"docutils literal notranslate\"><span class=\"pre\">from_db_value</span></code> is not implemented as a\nno-op on fields which do not require it (all Django fields).\nConsequently you may not call <code class=\"docutils literal notranslate\"><span class=\"pre\">super</span></code> in your definition.</p>\n</aside>\n</dd></dl>\n\n<p>When saving, <a class=\"reference internal\" href=\"#django.db.models.Field.pre_save\" title=\"django.db.models.Field.pre_save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">pre_save()</span></code></a> and <a class=\"reference internal\" href=\"#django.db.models.Field.get_db_prep_save\" title=\"django.db.models.Field.get_db_prep_save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_db_prep_save()</span></code></a> are used:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.get_db_prep_save\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_db_prep_save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.get_db_prep_save\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Same as the <a class=\"reference internal\" href=\"#django.db.models.Field.get_db_prep_value\" title=\"django.db.models.Field.get_db_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_db_prep_value()</span></code></a>, but called when the field value\nmust be <em>saved</em> to the database. By default returns\n<a class=\"reference internal\" href=\"#django.db.models.Field.get_db_prep_value\" title=\"django.db.models.Field.get_db_prep_value\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_db_prep_value()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.pre_save\">\n<span class=\"sig-name descname\"><span class=\"pre\">pre_save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_instance</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">add</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.pre_save\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Method called prior to <a class=\"reference internal\" href=\"#django.db.models.Field.get_db_prep_save\" title=\"django.db.models.Field.get_db_prep_save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_db_prep_save()</span></code></a> to prepare the value\nbefore being saved (e.g. for <a class=\"reference internal\" href=\"#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\">DateField.auto_now</span></code></a>).</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">model_instance</span></code> is the instance this field belongs to and <code class=\"docutils literal notranslate\"><span class=\"pre\">add</span></code>\nis whether the instance is being saved to the database for the first\ntime.</p>\n<p>It should return the value of the appropriate attribute from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">model_instance</span></code> for this field. The attribute name is in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">self.attname</span></code> (this is set up by <a class=\"reference internal\" href=\"#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>).</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#preprocessing-values-before-saving\"><span class=\"std std-ref\">Preprocessing values before saving</span></a> for usage.</p>\n</dd></dl>\n\n<p>Fields often receive their values as a different type, either from\nserialization or from forms.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.to_python\">\n<span class=\"sig-name descname\"><span class=\"pre\">to_python</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.to_python\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Converts the value into the correct Python object. It acts as the\nreverse of <a class=\"reference internal\" href=\"#django.db.models.Field.value_to_string\" title=\"django.db.models.Field.value_to_string\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">value_to_string()</span></code></a>, and is also called in\n<a class=\"reference internal\" href=\"/en/4.0/ref/models/instances/#django.db.models.Model.clean\" title=\"django.db.models.Model.clean\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">clean()</span></code></a>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#converting-values-to-python-objects\"><span class=\"std std-ref\">Converting values to Python objects</span></a> for usage.</p>\n</dd></dl>\n\n<p>Besides saving to the database, the field also needs to know how to\nserialize its value:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.value_from_object\">\n<span class=\"sig-name descname\"><span class=\"pre\">value_from_object</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.value_from_object\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the field’s value for the given model instance.</p>\n<p>This method is often used by <a class=\"reference internal\" href=\"#django.db.models.Field.value_to_string\" title=\"django.db.models.Field.value_to_string\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">value_to_string()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.value_to_string\">\n<span class=\"sig-name descname\"><span class=\"pre\">value_to_string</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.value_to_string\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Converts <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> to a string. Used to serialize the value of the field.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#converting-model-field-to-serialization\"><span class=\"std std-ref\">Converting field data for serialization</span></a> for usage.</p>\n</dd></dl>\n\n<p>When using <a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">model</span> <span class=\"pre\">forms</span></code></a>, the <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code>\nneeds to know which form field it should be represented by:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.formfield\">\n<span class=\"sig-name descname\"><span class=\"pre\">formfield</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form_class</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">choices_form_class</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.formfield\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the default <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.Field</span></code></a> of this field for\n<a class=\"reference internal\" href=\"/en/4.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a>.</p>\n<p>By default, if both <code class=\"docutils literal notranslate\"><span class=\"pre\">form_class</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">choices_form_class</span></code> are\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, it uses <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>. If the field has\n<a class=\"reference internal\" href=\"#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> and <code class=\"docutils literal notranslate\"><span class=\"pre\">choices_form_class</span></code>\nisn’t specified, it uses <a class=\"reference internal\" href=\"/en/4.0/ref/forms/fields/#django.forms.TypedChoiceField\" title=\"django.forms.TypedChoiceField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TypedChoiceField</span></code></a>.</p>\n<p>See <a class=\"reference internal\" href=\"/en/4.0/howto/custom-model-fields/#specifying-form-field-for-model-field\"><span class=\"std std-ref\">Specifying the form field for a model field</span></a> for usage.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.deconstruct\">\n<span class=\"sig-name descname\"><span class=\"pre\">deconstruct</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Field.deconstruct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns a 4-tuple with enough information to recreate the field:</p>\n<ol class=\"arabic simple\">\n<li><p>The name of the field on the model.</p></li>\n<li><p>The import path of the field (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django.db.models.IntegerField&quot;</span></code>).\nThis should be the most portable version, so less specific may be better.</p></li>\n<li><p>A list of positional arguments.</p></li>\n<li><p>A dict of keyword arguments.</p></li>\n</ol>\n<p>This method must be added to fields prior to 1.7 to migrate its data\nusing <a class=\"reference internal\" href=\"/en/4.0/topics/migrations/\"><span class=\"doc\">Migrations</span></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"field-attribute-reference\">\n<span id=\"model-field-attributes\"></span><h1>Field attribute reference<a class=\"heading-anchor\" href=\"#field-attribute-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Every <code class=\"docutils literal notranslate\"><span class=\"pre\">Field</span></code> instance contains several attributes that allow\nintrospecting its behavior. Use these attributes instead of <code class=\"docutils literal notranslate\"><span class=\"pre\">isinstance</span></code>\nchecks when you need to write code that depends on a field’s functionality.\nThese attributes can be used together with the <a class=\"reference internal\" href=\"/en/4.0/ref/models/meta/#model-meta-field-api\"><span class=\"std std-ref\">Model._meta API</span></a> to narrow down a search for specific field types.\nCustom model fields should implement these flags.</p>\n<section id=\"attributes-for-fields\">\n<h2>Attributes for fields<a class=\"heading-anchor\" href=\"#attributes-for-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.auto_created\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">auto_created</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.auto_created\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that indicates if the field was automatically created, such\nas the <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code> used by model inheritance.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.concrete\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">concrete</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.concrete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that indicates if the field has a database column associated\nwith it.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.hidden\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">hidden</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.hidden\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that indicates if a field is used to back another non-hidden\nfield’s functionality (e.g. the <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">object_id</span></code> fields\nthat make up a <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code>). The <code class=\"docutils literal notranslate\"><span class=\"pre\">hidden</span></code> flag is used to\ndistinguish what constitutes the public subset of fields on the model from\nall the fields on the model.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p><a class=\"reference internal\" href=\"/en/4.0/ref/models/meta/#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>\nexcludes hidden fields by default. Pass in <code class=\"docutils literal notranslate\"><span class=\"pre\">include_hidden=True</span></code> to\nreturn hidden fields in the results.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.is_relation\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_relation</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.is_relation\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that indicates if a field contains references to one or\nmore other models for its functionality (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>, etc.).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">model</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the model on which the field is defined. If a field is defined on\na superclass of a model, <code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code> will refer to the superclass, not the\nclass of the instance.</p>\n</dd></dl>\n\n</section>\n<section id=\"attributes-for-fields-with-relations\">\n<h2>Attributes for fields with relations<a class=\"heading-anchor\" href=\"#attributes-for-fields-with-relations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>These attributes are used to query for the cardinality and other details of a\nrelation. These attribute are present on all fields; however, they will only\nhave boolean values (rather than <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>) if the field is a relation type\n(<a class=\"reference internal\" href=\"#django.db.models.Field.is_relation\" title=\"django.db.models.Field.is_relation\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.is_relation=True</span></code></a>).</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.many_to_many\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">many_to_many</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.many_to_many\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the field has a many-to-many relation;\n<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise. The only field included with Django where this is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.many_to_one\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">many_to_one</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.many_to_one\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the field has a many-to-one relation, such\nas a <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>; <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.one_to_many\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">one_to_many</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.one_to_many\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the field has a one-to-many relation, such\nas a <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericRelation</span></code> or the reverse of a <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>; <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>\notherwise.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.one_to_one\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">one_to_one</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.one_to_one\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean flag that is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the field has a one-to-one relation, such\nas a <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>; <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> otherwise.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Field.related_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Field.</span></span><span class=\"sig-name descname\"><span class=\"pre\">related_model</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Field.related_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Points to the model the field relates to. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey(Author,</span> <span class=\"pre\">on_delete=models.CASCADE)</span></code>. The <code class=\"docutils literal notranslate\"><span class=\"pre\">related_model</span></code> for\na <code class=\"docutils literal notranslate\"><span class=\"pre\">GenericForeignKey</span></code> is always <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n</section>\n</section>\n","rootId":"","toc":[{"title":"Model field reference","anchor":"","children":[{"title":"Field options","anchor":"field-options","children":[{"title":"null","anchor":"null","children":[]},{"title":"blank","anchor":"blank","children":[]},{"title":"choices","anchor":"choices","children":[{"title":"Enumeration types","anchor":"enumeration-types","children":[]}]},{"title":"db_column","anchor":"db-column","children":[]},{"title":"db_index","anchor":"db-index","children":[]},{"title":"db_tablespace","anchor":"db-tablespace","children":[]},{"title":"default","anchor":"default","children":[]},{"title":"editable","anchor":"editable","children":[]},{"title":"error_messages","anchor":"error-messages","children":[]},{"title":"help_text","anchor":"help-text","children":[]},{"title":"primary_key","anchor":"primary-key","children":[]},{"title":"unique","anchor":"unique","children":[]},{"title":"unique_for_date","anchor":"unique-for-date","children":[]},{"title":"unique_for_month","anchor":"unique-for-month","children":[]},{"title":"unique_for_year","anchor":"unique-for-year","children":[]},{"title":"verbose_name","anchor":"verbose-name","children":[]},{"title":"validators","anchor":"validators","children":[{"title":"Registering and fetching lookups","anchor":"registering-and-fetching-lookups","children":[]}]}]},{"title":"Field types","anchor":"field-types","children":[{"title":"AutoField","anchor":"autofield","children":[]},{"title":"BigAutoField","anchor":"bigautofield","children":[]},{"title":"BigIntegerField","anchor":"bigintegerfield","children":[]},{"title":"BinaryField","anchor":"binaryfield","children":[]},{"title":"BooleanField","anchor":"booleanfield","children":[]},{"title":"CharField","anchor":"charfield","children":[]},{"title":"DateField","anchor":"datefield","children":[]},{"title":"DateTimeField","anchor":"datetimefield","children":[]},{"title":"DecimalField","anchor":"decimalfield","children":[]},{"title":"DurationField","anchor":"durationfield","children":[]},{"title":"EmailField","anchor":"emailfield","children":[]},{"title":"FileField","anchor":"filefield","children":[{"title":"FileField and FieldFile","anchor":"filefield-and-fieldfile","children":[]}]},{"title":"FilePathField","anchor":"filepathfield","children":[]},{"title":"FloatField","anchor":"floatfield","children":[]},{"title":"GenericIPAddressField","anchor":"genericipaddressfield","children":[]},{"title":"ImageField","anchor":"imagefield","children":[]},{"title":"IntegerField","anchor":"integerfield","children":[]},{"title":"JSONField","anchor":"jsonfield","children":[]},{"title":"PositiveBigIntegerField","anchor":"positivebigintegerfield","children":[]},{"title":"PositiveIntegerField","anchor":"positiveintegerfield","children":[]},{"title":"PositiveSmallIntegerField","anchor":"positivesmallintegerfield","children":[]},{"title":"SlugField","anchor":"slugfield","children":[]},{"title":"SmallAutoField","anchor":"smallautofield","children":[]},{"title":"SmallIntegerField","anchor":"smallintegerfield","children":[]},{"title":"TextField","anchor":"textfield","children":[]},{"title":"TimeField","anchor":"timefield","children":[]},{"title":"URLField","anchor":"urlfield","children":[]},{"title":"UUIDField","anchor":"uuidfield","children":[]}]},{"title":"Relationship fields","anchor":"module-django.db.models.fields.related","children":[{"title":"ForeignKey","anchor":"foreignkey","children":[{"title":"Database Representation","anchor":"database-representation","children":[]},{"title":"Arguments","anchor":"arguments","children":[]}]},{"title":"ManyToManyField","anchor":"manytomanyfield","children":[{"title":"Database Representation","anchor":"id1","children":[]},{"title":"Arguments","anchor":"manytomany-arguments","children":[]}]},{"title":"OneToOneField","anchor":"onetoonefield","children":[]}]},{"title":"Field API reference","anchor":"field-api-reference","children":[]}]},{"title":"Field attribute reference","anchor":"field-attribute-reference","children":[{"title":"Attributes for fields","anchor":"attributes-for-fields","children":[]},{"title":"Attributes for fields with relations","anchor":"attributes-for-fields-with-relations","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/en/4.0/ref/"},{"docname":"ref/models/index","title":"Models","url":"/en/4.0/ref/models/"}],"prev":{"docname":"ref/models/index","title":"Models","url":"/en/4.0/ref/models/"},"next":{"docname":"ref/models/indexes","title":"Model index reference","url":"/en/4.0/ref/models/indexes/"},"formats":{"html":"/en/4.0/ref/models/fields/","markdown":"/en/4.0/ref/models/fields.md","json":"/en/4.0/ref/models/fields.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/ref/models/fields.txt","official":"https://docs.djangoproject.com/en/4.0/ref/models/fields/","inVersions":["dev","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","1.8"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}