{"title":"PostgreSQL specific model fields","version":"1.8","locale":"en","docname":"ref/contrib/postgres/fields","url":"/en/1.8/ref/contrib/postgres/fields/","canonical":"https://djangodocs.dev/en/1.8/ref/contrib/postgres/fields/","summary":"All of these fields are available from the django.contrib.postgres.fields module.","html":"<h1>PostgreSQL specific model fields<a class=\"heading-anchor\" href=\"#postgresql-specific-model-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>All of these fields are available from the <code class=\"docutils literal notranslate\">django.contrib.postgres.fields</code>\nmodule.</p>\n<section id=\"arrayfield\">\n<h2>ArrayField<a class=\"heading-anchor\" href=\"#arrayfield\"><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.contrib.postgres.fields.ArrayField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ArrayField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">base_field</em>, <em class=\"sig-param\">size<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.ArrayField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A field for storing lists of data. Most field types can be used, you simply\npass another field instance as the <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField.base_field\" title=\"django.contrib.postgres.fields.ArrayField.base_field\"><code class=\"xref py py-attr docutils literal notranslate\">base_field</code></a>. You may also specify a <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField.size\" title=\"django.contrib.postgres.fields.ArrayField.size\"><code class=\"xref py py-attr docutils literal notranslate\">size</code></a>. <code class=\"docutils literal notranslate\">ArrayField</code> can be nested to store multi-dimensional\narrays.</p>\n<p>If you give the field a <a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\">default</code></a>, ensure\nit’s a callable such as <code class=\"docutils literal notranslate\">list</code> (for an empty default) or a callable that\nreturns a list (such as a function). Incorrectly using <code class=\"docutils literal notranslate\">default=[]</code>\ncreates a mutable default that is shared between all instances of\n<code class=\"docutils literal notranslate\">ArrayField</code>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.ArrayField.base_field\">\n<span class=\"sig-name descname\">base_field</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.ArrayField.base_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This is a required argument.</p>\n<p>Specifies the underlying data type and behavior for the array. It\nshould be an instance of a subclass of\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a>. For example, it could be an\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a> or a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a>. Most field types are permitted,\nwith the exception of those handling relational data\n(<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>,\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> and\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>).</p>\n<p>It is possible to nest array fields - you can specify an instance of\n<code class=\"docutils literal notranslate\">ArrayField</code> as the <code class=\"docutils literal notranslate\">base_field</code>. 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=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> ArrayField\n\n<span class=\"k\">class</span> <span class=\"nc\">ChessBoard</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    board <span class=\"o\">=</span> ArrayField<span class=\"p\">(</span>\n        ArrayField<span class=\"p\">(</span>\n            models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n            size<span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n        <span class=\"p\">),</span>\n        size<span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>Transformation of values between the database and the model, validation\nof data and configuration, and serialization are all delegated to the\nunderlying base field.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.ArrayField.size\">\n<span class=\"sig-name descname\">size</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.ArrayField.size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This is an optional argument.</p>\n<p>If passed, the array will have a maximum size as specified. This will\nbe passed to the database, although PostgreSQL at present does not\nenforce the restriction.</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>When nesting <code class=\"docutils literal notranslate\">ArrayField</code>, whether you use the size parameter or not,\nPostgreSQL requires that the arrays are rectangular:</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=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> ArrayField\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Board</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    pieces <span class=\"o\">=</span> ArrayField<span class=\"p\">(</span>ArrayField<span class=\"p\">(</span>models<span class=\"o\">.</span>IntegerField<span class=\"p\">()))</span>\n\n<span class=\"c1\"># Valid</span>\nBoard<span class=\"p\">(</span>pieces<span class=\"o\">=</span><span class=\"p\">[</span>\n    <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">],</span>\n    <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">],</span>\n<span class=\"p\">])</span>\n\n<span class=\"c1\"># Not valid</span>\nBoard<span class=\"p\">(</span>pieces<span class=\"o\">=</span><span class=\"p\">[</span>\n    <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">],</span>\n    <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n<span class=\"p\">])</span>\n</code></pre></div>\n<p>If irregular shapes are required, then the underlying field should be made\nnullable and the values padded with <code class=\"docutils literal notranslate\">None</code>.</p>\n</aside>\n<section id=\"querying-arrayfield\">\n<h3>Querying ArrayField<a class=\"heading-anchor\" href=\"#querying-arrayfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>There are a number of custom lookups and transforms for <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\">ArrayField</code></a>.\nWe will use the following example 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=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> ArrayField\n\n<span class=\"k\">class</span> <span class=\"nc\">Post</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    tags <span class=\"o\">=</span> ArrayField<span class=\"p\">(</span>models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">),</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>  <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<section id=\"contains\">\n<span id=\"std-fieldlookup-arrayfield.contains\"></span><h4>contains<a class=\"heading-anchor\" href=\"#contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The <a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> lookup is overridden on <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\">ArrayField</code></a>. The\nreturned objects will be those where the values passed are a subset of the\ndata. It uses the SQL operator <code class=\"docutils literal notranslate\">&#64;&gt;</code>. 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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Third post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;tutorial&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__contains<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__contains<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Third post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__contains<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"contained-by\">\n<span id=\"std-fieldlookup-arrayfield.contained_by\"></span><h4>contained_by<a class=\"heading-anchor\" href=\"#contained-by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>This is the inverse of the <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> lookup -\nthe objects returned will be those where the data is a subset of the values\npassed. It uses the SQL operator <code class=\"docutils literal notranslate\">&lt;&#64;</code>. 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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Third post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;tutorial&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__contained_by<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__contained_by<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tutorial&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;, &lt;Post: Third post&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"overlap\">\n<span id=\"std-fieldlookup-arrayfield.overlap\"></span><h4>overlap<a class=\"heading-anchor\" href=\"#overlap\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns objects where the data shares any results with the values passed. Uses\nthe SQL operator <code class=\"docutils literal notranslate\">&amp;&amp;</code>. 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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Third post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;tutorial&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__overlap<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__overlap<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tutorial&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;, &lt;Post: Third post&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"len\">\n<span id=\"std-fieldlookup-arrayfield.len\"></span><h4>len<a class=\"heading-anchor\" href=\"#len\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns the length of the array. The lookups available afterwards are those\navailable for <a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a>. 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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__len<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Post: Second post&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"index-transforms\">\n<span id=\"std-fieldlookup-arrayfield.index\"></span><h4>Index transforms<a class=\"heading-anchor\" href=\"#index-transforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>This class of transforms allows you to index into the array in queries. Any\nnon-negative integer can be used. There are no errors if it exceeds the\n<a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField.size\" title=\"django.contrib.postgres.fields.ArrayField.size\"><code class=\"xref py py-attr docutils literal notranslate\">size</code></a> of the array. The lookups available after the\ntransform are those from the <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField.base_field\" title=\"django.contrib.postgres.fields.ArrayField.base_field\"><code class=\"xref py py-attr docutils literal notranslate\">base_field</code></a>. 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=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__0<span class=\"o\">=</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__1__iexact<span class=\"o\">=</span><span class=\"s1\">&#39;Django&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Post: First post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__276<span class=\"o\">=</span><span class=\"s1\">&#39;javascript&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>PostgreSQL uses 1-based indexing for array fields when writing raw SQL.\nHowever these indexes and those used in <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.slice\"><code class=\"xref std std-lookup docutils literal notranslate\">slices</code></a>\nuse 0-based indexing to be consistent with Python.</p>\n</aside>\n</section>\n<section id=\"slice-transforms\">\n<span id=\"std-fieldlookup-arrayfield.slice\"></span><h4>Slice transforms<a class=\"heading-anchor\" href=\"#slice-transforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>This class of transforms allow you to take a slice of the array. Any two\nnon-negative integers can be used, separated by a single underscore. The\nlookups available after the transform do not change. 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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;First post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;django&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Second post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Third post&#39;</span><span class=\"p\">,</span> tags<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;python&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__0_1<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>tags__0_2__contains<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;thoughts&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Post: First post&gt;, &lt;Post: Second post&gt;]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>PostgreSQL uses 1-based indexing for array fields when writing raw SQL.\nHowever these slices and those used in <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.index\"><code class=\"xref std std-lookup docutils literal notranslate\">indexes</code></a>\nuse 0-based indexing to be consistent with Python.</p>\n</aside>\n<aside class=\"admonition-multidimensional-arrays-with-indexes-and-slices admonition\" role=\"note\">\n<p class=\"admonition-title\">Multidimensional arrays with indexes and slices</p>\n<p>PostgreSQL has some rather esoteric behavior when using indexes and slices\non multidimensional arrays. It will always work to use indexes to reach\ndown to the final underlying data, but most other slices behave strangely\nat the database level and cannot be supported in a logical, consistent\nfashion by Django.</p>\n</aside>\n</section>\n</section>\n<section id=\"indexing-arrayfield\">\n<h3>Indexing ArrayField<a class=\"heading-anchor\" href=\"#indexing-arrayfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>At present using <a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\">db_index</code></a> will create a\n<code class=\"docutils literal notranslate\">btree</code> index. This does not offer particularly significant help to querying.\nA more useful index is a <code class=\"docutils literal notranslate\">GIN</code> index, which you should create using a\n<a class=\"reference internal\" href=\"/en/1.8/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\">RunSQL</code></a> operation.</p>\n</section>\n</section>\n<section id=\"hstorefield\">\n<h2>HStoreField<a class=\"heading-anchor\" href=\"#hstorefield\"><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.contrib.postgres.fields.HStoreField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">HStoreField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.HStoreField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A field for storing mappings of strings to strings. The Python data type\nused is a <code class=\"docutils literal notranslate\">dict</code>.</p>\n<p>To use this field, you’ll need to:</p>\n<ol class=\"arabic\">\n<li><p>Add <code class=\"docutils literal notranslate\">'django.contrib.postgres'</code> in your <a class=\"reference internal\" href=\"/en/1.8/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p></li>\n<li><p>Setup the hstore extension in PostgreSQL before the first <code class=\"docutils literal notranslate\">CreateModel</code>\nor <code class=\"docutils literal notranslate\">AddField</code> operation by adding a migration with the\n<a class=\"reference internal\" href=\"/en/1.8/ref/contrib/postgres/operations/#django.contrib.postgres.operations.HStoreExtension\" title=\"django.contrib.postgres.operations.HStoreExtension\"><code class=\"xref py py-class docutils literal notranslate\">HStoreExtension</code></a> operation.\nFor 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=\"nn\">django.contrib.postgres.operations</span> <span class=\"kn\">import</span> HStoreExtension\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        HStoreExtension<span class=\"p\">(),</span>\n        <span class=\"o\">...</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Creating the extension requires a database user with superuser\nprivileges. If the Django database user doesn’t have superuser\nprivileges, you’ll have to create the extension outside of Django\nmigrations with a user that has the appropriate privileges. In that\ncase, connect to your Django database and run the query\n<code class=\"docutils literal notranslate\">CREATE EXTENSION IF NOT EXISTS hstore;</code></p>\n</li>\n</ol>\n<p>You’ll see an error like <code class=\"docutils literal notranslate\">can't adapt type 'dict'</code> if you skip the first\nstep, or <code class=\"docutils literal notranslate\">type &quot;hstore&quot; does not exist</code> if you skip the second.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>On occasions it may be useful to require or restrict the keys which are\nvalid for a given field. This can be done using the\n<a class=\"reference internal\" href=\"/en/1.8/ref/contrib/postgres/validators/#django.contrib.postgres.validators.KeysValidator\" title=\"django.contrib.postgres.validators.KeysValidator\"><code class=\"xref py py-class docutils literal notranslate\">KeysValidator</code></a>.</p>\n</aside>\n<section id=\"querying-hstorefield\">\n<h3>Querying HStoreField<a class=\"heading-anchor\" href=\"#querying-hstorefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>In addition to the ability to query by key, there are a number of custom\nlookups available for <code class=\"docutils literal notranslate\">HStoreField</code>.</p>\n<p>We will use the following example 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=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> HStoreField\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Dog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    data <span class=\"o\">=</span> HStoreField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>  <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<section id=\"key-lookups\">\n<span id=\"std-fieldlookup-hstorefield.key\"></span><h4>Key lookups<a class=\"heading-anchor\" href=\"#key-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>To query based on a given key, you simply use that key as the lookup name:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;labrador&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__breed<span class=\"o\">=</span><span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n<p>You can chain other lookups after key lookups:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__breed__contains<span class=\"o\">=</span><span class=\"s1\">&#39;l&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n<p>If the key you wish to query by clashes with the name of another lookup, you\nneed to use the <a class=\"reference internal\" href=\"#std-fieldlookup-hstorefield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\">hstorefield.contains</code></a> lookup instead.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Since any string could be a key in a hstore value, any lookup other than\nthose listed below will be interpreted as a key lookup. No errors are\nraised. Be extra careful for typing mistakes, and always check your queries\nwork as you intend.</p>\n</aside>\n</section>\n<section id=\"std-fieldlookup-hstorefield.contains\">\n<span id=\"id1\"></span><h4>contains<a class=\"heading-anchor\" href=\"#std-fieldlookup-hstorefield.contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The <a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> lookup is overridden on\n<a class=\"reference internal\" href=\"#django.contrib.postgres.fields.HStoreField\" title=\"django.contrib.postgres.fields.HStoreField\"><code class=\"xref py py-class docutils literal notranslate\">HStoreField</code></a>. The returned objects are\nthose where the given <code class=\"docutils literal notranslate\">dict</code> of key-value pairs are all contained in the\nfield. It uses the SQL operator <code class=\"docutils literal notranslate\">&#64;&gt;</code>. 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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;labrador&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Fred&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contains<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">[&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contains<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-hstorefield.contained_by\">\n<span id=\"id2\"></span><h4>contained_by<a class=\"heading-anchor\" href=\"#std-fieldlookup-hstorefield.contained_by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>This is the inverse of the <a class=\"reference internal\" href=\"#std-fieldlookup-hstorefield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> lookup -\nthe objects returned will be those where the key-value pairs on the object are\na subset of those in the value passed. It uses the SQL operator <code class=\"docutils literal notranslate\">&lt;&#64;</code>. 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=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;labrador&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Fred&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contained_by<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;, &lt;Dog: Fred&gt;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contained_by<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">[&lt;Dog: Fred&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"has-key\">\n<span id=\"std-fieldlookup-hstorefield.has_key\"></span><h4>has_key<a class=\"heading-anchor\" href=\"#has-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns objects where the given key is in the data. Uses the SQL operator\n<code class=\"docutils literal notranslate\">?</code>. 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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;labrador&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__has_key<span class=\"o\">=</span><span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"has-keys\">\n<span id=\"std-fieldlookup-hstorefield.has_keys\"></span><h4>has_keys<a class=\"heading-anchor\" href=\"#has-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns objects where all of the given keys are in the data. Uses the SQL operator\n<code class=\"docutils literal notranslate\">?&amp;</code>. 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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__has_keys<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"keys\">\n<span id=\"std-fieldlookup-hstorefield.keys\"></span><h4>keys<a class=\"heading-anchor\" href=\"#keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns objects where the array of keys is the given value. Note that the order\nis not guaranteed to be reliable, so this transform is mainly useful for using\nin conjunction with lookups on\n<a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\">ArrayField</code></a>. Uses the SQL function\n<code class=\"docutils literal notranslate\">akeys()</code>. 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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;toy&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;bone&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__keys__overlap<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;toy&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"values\">\n<span id=\"std-fieldlookup-hstorefield.values\"></span><h4>values<a class=\"heading-anchor\" href=\"#values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returns objects where the array of values is the given value. Note that the\norder is not guaranteed to be reliable, so this transform is mainly useful for\nusing in conjunction with lookups on\n<a class=\"reference internal\" href=\"#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\">ArrayField</code></a>. Uses the SQL function\n<code class=\"docutils literal notranslate\">avalues()</code>. 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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Rufus&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;labrador&#39;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Meg&#39;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;breed&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;owner&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bob&#39;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__values__contains<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;collie&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">[&lt;Dog: Meg&gt;]</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"range-fields\">\n<span id=\"id3\"></span><h2>Range Fields<a class=\"heading-anchor\" href=\"#range-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>There are five range field types, corresponding to the built-in range types in\nPostgreSQL. These fields are used to store a range of values; for example the\nstart and end timestamps of an event, or the range of ages an activity is\nsuitable for.</p>\n<p>All of the range fields translate to <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#adapt-range\" title=\"(in Psycopg v2.9)\"><span class=\"xref std std-ref\">psycopg2 Range objects</span></a> in python, but also accept tuples as input if no bounds\ninformation is necessary. The default is lower bound included, upper bound\nexcluded.</p>\n<section id=\"integerrangefield\">\n<h3>IntegerRangeField<a class=\"heading-anchor\" href=\"#integerrangefield\"><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.contrib.postgres.fields.IntegerRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">IntegerRangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.IntegerRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Stores a range of integers. Based on an\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a>. Represented by an <code class=\"docutils literal notranslate\">int4range</code> in\nthe database and a <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.NumericRange\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-class docutils literal notranslate\">NumericRange</code></a> in\nPython.</p>\n</dd></dl>\n\n</section>\n<section id=\"bigintegerrangefield\">\n<h3>BigIntegerRangeField<a class=\"heading-anchor\" href=\"#bigintegerrangefield\"><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.contrib.postgres.fields.BigIntegerRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BigIntegerRangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.BigIntegerRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Stores a range of large integers. Based on a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.BigIntegerField\" title=\"django.db.models.BigIntegerField\"><code class=\"xref py py-class docutils literal notranslate\">BigIntegerField</code></a>. Represented by an <code class=\"docutils literal notranslate\">int8range</code>\nin the database and a <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.NumericRange\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-class docutils literal notranslate\">NumericRange</code></a> in\nPython.</p>\n</dd></dl>\n\n</section>\n<section id=\"floatrangefield\">\n<h3>FloatRangeField<a class=\"heading-anchor\" href=\"#floatrangefield\"><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.contrib.postgres.fields.FloatRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FloatRangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.FloatRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Stores a range of floating point values. Based on a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.FloatField\" title=\"django.db.models.FloatField\"><code class=\"xref py py-class docutils literal notranslate\">FloatField</code></a>. Represented by a <code class=\"docutils literal notranslate\">numrange</code> in the\ndatabase and a <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.NumericRange\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-class docutils literal notranslate\">NumericRange</code></a> in Python.</p>\n</dd></dl>\n\n</section>\n<section id=\"datetimerangefield\">\n<h3>DateTimeRangeField<a class=\"heading-anchor\" href=\"#datetimerangefield\"><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.contrib.postgres.fields.DateTimeRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateTimeRangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.DateTimeRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Stores a range of timestamps. Based on a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a>. Represented by a <code class=\"docutils literal notranslate\">tztsrange</code> in\nthe database and a <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.DateTimeTZRange\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeTZRange</code></a> in\nPython.</p>\n</dd></dl>\n\n</section>\n<section id=\"daterangefield\">\n<h3>DateRangeField<a class=\"heading-anchor\" href=\"#daterangefield\"><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.contrib.postgres.fields.DateRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DateRangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.DateRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Stores a range of dates. Based on a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a>. Represented by a <code class=\"docutils literal notranslate\">daterange</code> in the\ndatabase and a <a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.DateRange\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-class docutils literal notranslate\">DateRange</code></a> in Python.</p>\n</dd></dl>\n\n</section>\n<section id=\"querying-range-fields\">\n<h3>Querying Range Fields<a class=\"heading-anchor\" href=\"#querying-range-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>There are a number of custom lookups and transforms for range fields. They are\navailable on all the above fields, but we will use the following example\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=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"kn\">import</span> IntegerRangeField\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Event</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    ages <span class=\"o\">=</span> IntegerRangeField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>  <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<p>We will also use the following example objects:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Soft play&#39;</span><span class=\"p\">,</span> ages<span class=\"o\">=</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Pub trip&#39;</span><span class=\"p\">,</span> ages<span class=\"o\">=</span><span class=\"p\">(</span><span class=\"mi\">21</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>and <code class=\"docutils literal notranslate\">NumericRange</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">psycopg2.extras</span> <span class=\"kn\">import</span> NumericRange\n</code></pre></div>\n<section id=\"containment-functions\">\n<h4>Containment functions<a class=\"heading-anchor\" href=\"#containment-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>As with other PostgreSQL fields, there are three standard containment\noperators: <code class=\"docutils literal notranslate\">contains</code>, <code class=\"docutils literal notranslate\">contained_by</code> and <code class=\"docutils literal notranslate\">overlap</code>, using the SQL\noperators <code class=\"docutils literal notranslate\">&#64;&gt;</code>, <code class=\"docutils literal notranslate\">&lt;&#64;</code>, and <code class=\"docutils literal notranslate\">&amp;&amp;</code> respectively.</p>\n<section id=\"std-fieldlookup-rangefield.contains\">\n<span id=\"id4\"></span><h5>contains<a class=\"heading-anchor\" href=\"#std-fieldlookup-rangefield.contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__contains<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-rangefield.contained_by\">\n<span id=\"id5\"></span><h5>contained_by<a class=\"heading-anchor\" href=\"#std-fieldlookup-rangefield.contained_by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__contained_by<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-rangefield.overlap\">\n<span id=\"id6\"></span><h5>overlap<a class=\"heading-anchor\" href=\"#std-fieldlookup-rangefield.overlap\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__overlap<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"comparison-functions\">\n<h4>Comparison functions<a class=\"heading-anchor\" href=\"#comparison-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Range fields support the standard lookups: <a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-lt\"><code class=\"xref std std-lookup docutils literal notranslate\">lt</code></a>, <a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-gt\"><code class=\"xref std std-lookup docutils literal notranslate\">gt</code></a>,\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-lte\"><code class=\"xref std std-lookup docutils literal notranslate\">lte</code></a> and <a class=\"reference internal\" href=\"/en/1.8/ref/models/querysets/#std-fieldlookup-gte\"><code class=\"xref std std-lookup docutils literal notranslate\">gte</code></a>. These are not particularly helpful - they\ncompare the lower bounds first and then the upper bounds only if necessary.\nThis is also the strategy used to order by a range field. It is better to use\nthe specific range comparison operators.</p>\n<section id=\"fully-lt\">\n<span id=\"std-fieldlookup-rangefield.fully_lt\"></span><h5>fully_lt<a class=\"heading-anchor\" href=\"#fully-lt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>The returned ranges are strictly less than the passed range. In other words,\nall the points in the returned range are less than all those in the passed\nrange.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__fully_lt<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"fully-gt\">\n<span id=\"std-fieldlookup-rangefield.fully_gt\"></span><h5>fully_gt<a class=\"heading-anchor\" href=\"#fully-gt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>The returned ranges are strictly greater than the passed range. In other words,\nthe all the points in the returned range are greater than all those in the\npassed range.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__fully_gt<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Pub trip&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"not-lt\">\n<span id=\"std-fieldlookup-rangefield.not_lt\"></span><h5>not_lt<a class=\"heading-anchor\" href=\"#not-lt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>The returned ranges do not contain any points less than the passed range, that\nis the lower bound of the returned range is at least the lower bound of the\npassed range.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__not_lt<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;, &lt;Event: Pub trip&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"not-gt\">\n<span id=\"std-fieldlookup-rangefield.not_gt\"></span><h5>not_gt<a class=\"heading-anchor\" href=\"#not-gt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>The returned ranges do not contain any points greater than the passed range, that\nis the upper bound of the returned range is at most the upper bound of the\npassed range.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__not_gt<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"adjacent-to\">\n<span id=\"std-fieldlookup-rangefield.adjacent_to\"></span><h5>adjacent_to<a class=\"heading-anchor\" href=\"#adjacent-to\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>The returned ranges share a bound with the passed range.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__adjacent_to<span class=\"o\">=</span>NumericRange<span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">21</span><span class=\"p\">))</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;, &lt;Event: Pub trip&gt;]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"querying-using-the-bounds\">\n<h4>Querying using the bounds<a class=\"heading-anchor\" href=\"#querying-using-the-bounds\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>There are three transforms available for use in queries. You can extract the\nlower or upper bound, or query based on emptiness.</p>\n<section id=\"startswith\">\n<span id=\"std-fieldlookup-rangefield.startswith\"></span><h5>startswith<a class=\"heading-anchor\" href=\"#startswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>Returned objects have the given lower bound. Can be chained to valid lookups\nfor the base field.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__startswith<span class=\"o\">=</span><span class=\"mi\">21</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Event: Pub trip&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"endswith\">\n<span id=\"std-fieldlookup-rangefield.endswith\"></span><h5>endswith<a class=\"heading-anchor\" href=\"#endswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>Returned objects have the given upper bound. Can be chained to valid lookups\nfor the base field.</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>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__endswith<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Event: Soft play&gt;]</span>\n</code></pre></div>\n</section>\n<section id=\"isempty\">\n<span id=\"std-fieldlookup-rangefield.isempty\"></span><h5>isempty<a class=\"heading-anchor\" href=\"#isempty\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>Returned objects are empty ranges. Can be chained to valid lookups for a\n<a class=\"reference internal\" href=\"/en/1.8/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\">BooleanField</code></a>.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>Event<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>ages__isempty<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">[]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"defining-your-own-range-types\">\n<h4>Defining your own range types<a class=\"heading-anchor\" href=\"#defining-your-own-range-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>PostgreSQL allows the definition of custom range types. Django’s model and form\nfield implementations use base classes below, and psycopg2 provides a\n<a class=\"reference external\" href=\"https://www.psycopg.org/docs/extras.html#psycopg2.extras.register_range\" title=\"(in Psycopg v2.9)\"><code class=\"xref py py-func docutils literal notranslate\">register_range()</code></a> to allow use of custom range\ntypes.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RangeField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Base class for model range fields.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeField.base_field\">\n<span class=\"sig-name descname\">base_field</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeField.base_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The model field to use.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeField.range_type\">\n<span class=\"sig-name descname\">range_type</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeField.range_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The psycopg2 range type to use.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeField.form_field\">\n<span class=\"sig-name descname\">form_field</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeField.form_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The form field class to use. Should be a subclass of\n<a class=\"reference internal\" href=\"#django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField\" title=\"django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.postgres.forms.BaseRangeField</code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">django.contrib.postgres.forms.</span><span class=\"sig-name descname\">BaseRangeField</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Base class for form range fields.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField.base_field\">\n<span class=\"sig-name descname\">base_field</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField.base_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The form field to use.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField.range_type\">\n<span class=\"sig-name descname\">range_type</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.django.contrib.postgres.forms.BaseRangeField.range_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The psycopg2 range type to use.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n</section>","rootId":"postgresql-specific-model-fields","toc":[{"title":"ArrayField","anchor":"arrayfield","children":[{"title":"Querying ArrayField","anchor":"querying-arrayfield","children":[{"title":"contains","anchor":"contains","children":[]},{"title":"contained_by","anchor":"contained-by","children":[]},{"title":"overlap","anchor":"overlap","children":[]},{"title":"len","anchor":"len","children":[]},{"title":"Index transforms","anchor":"index-transforms","children":[]},{"title":"Slice transforms","anchor":"slice-transforms","children":[]}]},{"title":"Indexing ArrayField","anchor":"indexing-arrayfield","children":[]}]},{"title":"HStoreField","anchor":"hstorefield","children":[{"title":"Querying HStoreField","anchor":"querying-hstorefield","children":[{"title":"Key lookups","anchor":"key-lookups","children":[]},{"title":"contains","anchor":"std-fieldlookup-hstorefield.contains","children":[]},{"title":"contained_by","anchor":"std-fieldlookup-hstorefield.contained_by","children":[]},{"title":"has_key","anchor":"has-key","children":[]},{"title":"has_keys","anchor":"has-keys","children":[]},{"title":"keys","anchor":"keys","children":[]},{"title":"values","anchor":"values","children":[]}]}]},{"title":"Range Fields","anchor":"range-fields","children":[{"title":"IntegerRangeField","anchor":"integerrangefield","children":[]},{"title":"BigIntegerRangeField","anchor":"bigintegerrangefield","children":[]},{"title":"FloatRangeField","anchor":"floatrangefield","children":[]},{"title":"DateTimeRangeField","anchor":"datetimerangefield","children":[]},{"title":"DateRangeField","anchor":"daterangefield","children":[]},{"title":"Querying Range Fields","anchor":"querying-range-fields","children":[{"title":"Containment functions","anchor":"containment-functions","children":[{"title":"contains","anchor":"std-fieldlookup-rangefield.contains","children":[]},{"title":"contained_by","anchor":"std-fieldlookup-rangefield.contained_by","children":[]},{"title":"overlap","anchor":"std-fieldlookup-rangefield.overlap","children":[]}]},{"title":"Comparison functions","anchor":"comparison-functions","children":[{"title":"fully_lt","anchor":"fully-lt","children":[]},{"title":"fully_gt","anchor":"fully-gt","children":[]},{"title":"not_lt","anchor":"not-lt","children":[]},{"title":"not_gt","anchor":"not-gt","children":[]},{"title":"adjacent_to","anchor":"adjacent-to","children":[]}]},{"title":"Querying using the bounds","anchor":"querying-using-the-bounds","children":[{"title":"startswith","anchor":"startswith","children":[]},{"title":"endswith","anchor":"endswith","children":[]},{"title":"isempty","anchor":"isempty","children":[]}]},{"title":"Defining your own range types","anchor":"defining-your-own-range-types","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/en/1.8/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/en/1.8/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/en/1.8/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/en/1.8/ref/contrib/postgres/"},"next":{"docname":"ref/contrib/postgres/forms","title":"PostgreSQL specific form fields and widgets","url":"/en/1.8/ref/contrib/postgres/forms/"},"formats":{"html":"/en/1.8/ref/contrib/postgres/fields/","markdown":"/en/1.8/ref/contrib/postgres/fields.md","json":"/en/1.8/ref/contrib/postgres/fields.json"},"source":"https://github.com/django/django/blob/stable/1.8.x/docs/ref/contrib/postgres/fields.txt","official":"https://docs.djangoproject.com/en/1.8/ref/contrib/postgres/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"]}