{"title":"PostgreSQL 特有模型字段","version":"4.2","locale":"zh-hans","docname":"ref/contrib/postgres/fields","url":"/zh-hans/4.2/ref/contrib/postgres/fields/","canonical":"https://djangodocs.dev/zh-hans/4.2/ref/contrib/postgres/fields/","summary":"所有这些字段都可以从 django.contrib.postgres.field 模块中获得。 对这些字段进行索引 Link to this heading # Index 和 Field.db_index 都创建了一个 B 树索引，在查询复杂的数据类型时并不是特别有用。像 GinIndex 和 GistIndex…","html":"<h1>PostgreSQL 特有模型字段<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>所有这些字段都可以从 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.postgres.field</span></code> 模块中获得。</p>\n<section id=\"indexing-these-fields\">\n<h2>对这些字段进行索引<a class=\"heading-anchor\" href=\"#indexing-these-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/zh-hans/4.2/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> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/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\"><span class=\"pre\">Field.db_index</span></code></a> 都创建了一个 B 树索引，在查询复杂的数据类型时并不是特别有用。像 <a class=\"reference internal\" href=\"/zh-hans/4.2/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> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/indexes/#django.contrib.postgres.indexes.GistIndex\" title=\"django.contrib.postgres.indexes.GistIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GistIndex</span></code></a> 这样的索引比较适合，不过索引的选择取决于你使用的查询。一般来说，GiST 可能是 <a class=\"reference internal\" href=\"#range-fields\"><span class=\"std std-ref\">range 字段</span></a> 和 <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\"><span class=\"pre\">HStoreField</span></code></a> 的好选择，而 GIN 可能对 <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\"><span class=\"pre\">ArrayField</span></code></a> 有帮助。</p>\n</section>\n<section id=\"arrayfield\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ArrayField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">base_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">size</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.contrib.postgres.fields.ArrayField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个用于存储数据列表的字段。大多数字段类型都可以使用，你可以通过另一个字段实例作为 <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\"><span class=\"pre\">base_field</span></code></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\"><span class=\"pre\">size</span></code></a>。<code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code> 可以嵌套来存储多维数组。</p>\n<p>如果你给字段一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>，确保它是一个可调用对象，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> （对于一个空的默认值），或者一个返回一个列表的可调用对象（比如一个函数）。错误地使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">default=[]</span></code> 会创建一个可变的默认值，这个默认值在 <code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></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\"><span class=\"pre\">base_field</span></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>这是一个必要的参数。</p>\n<p>指定数组的底层数据类型和行为。它应该是 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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> 子类的实例。例如，它可以是一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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> 或一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>。大多数字段类型都是允许的，但不包括处理关系数据的字段（<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>）以及文件字段（<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>）。</p>\n<p>可以嵌套数组字段——你可以指定一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code> 的实例作为 <code class=\"docutils literal notranslate\"><span class=\"pre\">base_field</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.postgres.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ArrayField</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ChessBoard</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\">board</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">ArrayField</span><span class=\"p\">(</span>\n            <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> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n            <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n        <span class=\"p\">),</span>\n        <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>数据库和模型之间的值的转换、数据和配置的验证以及序列化都是委托给底层基础字段的。</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\"><span class=\"pre\">size</span></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>这是一个可选的参数。</p>\n<p>如果传入，数组将有一个指定的最大大小。这将被传递给数据库，尽管 PostgreSQL 目前并没有强制执行这个限制。</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>嵌套 <code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code> 时，无论是否使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">size</span></code> 参数，PostgreSQL 都要求数组为矩形：</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.contrib.postgres.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ArrayField</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Board</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\">pieces</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()))</span>\n\n\n<span class=\"c1\"># Valid</span>\n<span class=\"n\">Board</span><span class=\"p\">(</span>\n    <span class=\"n\">pieces</span><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<span class=\"p\">)</span>\n\n<span class=\"c1\"># Not valid</span>\n<span class=\"n\">Board</span><span class=\"p\">(</span>\n    <span class=\"n\">pieces</span><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<span class=\"p\">)</span>\n</code></pre></div>\n<p>如果需要不规则的形状，则应将底层字段设为 null，并将值用 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> 填充。</p>\n</aside>\n<section id=\"querying-arrayfield\">\n<h3>查询 <code class=\"docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code><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><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\"><span class=\"pre\">ArrayField</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\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.postgres.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ArrayField</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Post</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">tags</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n<section id=\"contains\">\n<span id=\"std-fieldlookup-arrayfield.contains\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code><a class=\"heading-anchor\" href=\"#contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><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\"><span class=\"pre\">ArrayField</span></code></a> 上重写了 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a> 查询。返回的对象将是那些传递的值是数据的子集的对象。它使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;&gt;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Third post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Third post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;django&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"contained-by\">\n<span id=\"std-fieldlookup-arrayfield.contained_by\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></code><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>这是 <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a> 查询的反向操作 - 返回的对象将是那些数据是传递的值的子集的对象。它使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;&#64;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Third post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__contained_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__contained_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;, &lt;Post: Third post&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"overlap\">\n<span id=\"std-fieldlookup-arrayfield.overlap\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">overlap</span></code><a class=\"heading-anchor\" href=\"#overlap\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>返回数据与传递的值共享任何结果的对象。使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;&amp;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Third post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__overlap</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__overlap</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tutorial&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;, &lt;Post: Third post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__overlap</span><span class=\"o\">=</span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s2\">&quot;tags&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;, &lt;Post: Third post&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"4.2\">\n<p class=\"version-note-title\">Changed in Django 4.2</p><p>添加了 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.values()</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">values_list()</span></code> 作为右操作数的支持。</p>\n</aside>\n</section>\n<section id=\"len\">\n<span id=\"std-fieldlookup-arrayfield.len\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code><a class=\"heading-anchor\" href=\"#len\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>返回数组的长度。之后可用的查询与 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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> 相同。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__len</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: Second post&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"index-transforms\">\n<span id=\"std-fieldlookup-arrayfield.index\"></span><h4>索引转换<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>Index 转换将索引转换为数组。可以使用任何非负整数。如果超过数组的 <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\"><span class=\"pre\">size</span></code></a>，则不会出现错误。转换后可用的查询是来自 <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\"><span class=\"pre\">base_field</span></code></a> 的查询。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__0</span><span class=\"o\">=</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__1__iexact</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__276</span><span class=\"o\">=</span><span class=\"s2\">&quot;javascript&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>PostgreSQL 在编写原始 SQL 时，对数组字段使用基于 1 的索引。然而这些索引和 <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.slice\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">slices</span></code></a> 中使用的索引使用基于 0 的索引，以与 Python 保持一致。</p>\n</aside>\n</section>\n<section id=\"slice-transforms\">\n<span id=\"std-fieldlookup-arrayfield.slice\"></span><h4>切片转换<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>Slice 转换获取数组的一个切片。可以使用两个非负整数，用一个下划线分隔。转换后可用的查询不会改变。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;First post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Second post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Third post&quot;</span><span class=\"p\">,</span> <span class=\"n\">tags</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;django&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;python&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__0_1</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">tags__0_2__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;thoughts&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Post: First post&gt;, &lt;Post: Second post&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>PostgreSQL 在编写原始 SQL 时，对数组字段使用基于 1 的索引。然而这些分片和 <a class=\"reference internal\" href=\"#std-fieldlookup-arrayfield.index\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">indexes</span></code></a> 中使用的分片使用基于 0 的索引，以与 Python 保持一致。</p>\n</aside>\n<aside class=\"admonition-multidimensional-arrays-with-indexes-and-slices admonition\">\n<p class=\"admonition-title\">带索引和切片的多维数组</p>\n<p>PostgreSQL 在多维数组上使用索引和切片时，有一些相当神秘的行为。使用索引向下到达最终的底层数据总是可行的，但是大多数其他的切片在数据库层面的行为很奇怪，不能被 Django 以逻辑的、一致的方式支持。</p>\n</aside>\n</section>\n</section>\n</section>\n<section id=\"citext-fields\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">CIText</span></code> 字段<a class=\"heading-anchor\" href=\"#citext-fields\"><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.CIText\">\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\">CIText</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.contrib.postgres.fields.CIText\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"4.2\">\n<p class=\"version-note-title\">Deprecated since Django 4.2</p><p><span class=\"versionmodified deprecated\">Deprecated since version 4.2.</span></p>\n</aside>\n<p>一个用于创建由 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/citext.html\">citext</a> 类型支持的不区分大小写的文本字段的混入。在使用它之前，请阅读 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/citext.html#id-1.11.7.19.9\">性能考虑因素</a> 。</p>\n<p>要使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">citext</span></code>，使用 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CITextExtension</span> <span class=\"pre\">`</span> <span class=\"pre\">操作，在第一次</span> <span class=\"pre\">``CreateModel`</span></code> 迁移操作之前，在 PostgreSQL 中 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/operations/#create-postgresql-extensions\"><span class=\"std std-ref\">安装 citext 扩展</span></a>。</p>\n<p>如果你使用的是 <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\"><span class=\"pre\">ArrayField</span></code></a> 的 <code class=\"docutils literal notranslate\"><span class=\"pre\">CIText</span></code> 字段，你必须在你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 中添加 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code>，否则字段值会以字符串形式出现，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">'{thoughts,django}'</span></code>。</p>\n<p>提供了几个使用混入的字段：</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.CICharField\">\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\">CICharField</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.contrib.postgres.fields.CICharField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"4.2\">\n<p class=\"version-note-title\">Deprecated since Django 4.2</p><p><span class=\"versionmodified deprecated\">Deprecated since version 4.2: </span><code class=\"docutils literal notranslate\"><span class=\"pre\">CICharField</span></code> 已被弃用，推荐使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">CharField(db_collation=&quot;…&quot;)</span></code> 并使用不区分大小写的非确定性排序规则。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.CIEmailField\">\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\">CIEmailField</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.contrib.postgres.fields.CIEmailField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"4.2\">\n<p class=\"version-note-title\">Deprecated since Django 4.2</p><p><span class=\"versionmodified deprecated\">Deprecated since version 4.2: </span><code class=\"docutils literal notranslate\"><span class=\"pre\">CIEmailField</span></code> 已被弃用，推荐使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField(db_collation=&quot;…&quot;)</span></code> 并使用不区分大小写的非确定性排序规则。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.CITextField\">\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\">CITextField</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.contrib.postgres.fields.CITextField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-deprecated\" data-version=\"4.2\">\n<p class=\"version-note-title\">Deprecated since Django 4.2</p><p><span class=\"versionmodified deprecated\">Deprecated since version 4.2: </span><code class=\"docutils literal notranslate\"><span class=\"pre\">CITextField</span></code> 已被弃用，推荐使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">TextField(db_collation=&quot;…&quot;)</span></code> 并使用不区分大小写的非确定性排序规则。</p>\n</aside>\n<p>这些字段分别是 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.EmailField\" title=\"django.db.models.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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><code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code> 不会在数据库中强制执行，因为 <code class=\"docutils literal notranslate\"><span class=\"pre\">citext</span></code> 与 PostgreSQL 的 <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> 类型相似。</p>\n</dd></dl>\n\n<aside class=\"admonition-case-insensitive-collations admonition\">\n<p class=\"admonition-title\">不区分大小写的字节序</p>\n<p>最好使用非确定性排序规则而不是 <code class=\"docutils literal notranslate\"><span class=\"pre\">citext</span></code> 扩展。您可以使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/operations/#django.contrib.postgres.operations.CreateCollation\" title=\"django.contrib.postgres.operations.CreateCollation\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CreateCollation</span></code></a> 迁移操作来创建它们。有关更多详细信息，请参阅 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/operations/#manage-postgresql-collations\"><span class=\"std std-ref\">使用迁移来管理整理</span></a> 和 PostgreSQL 文档中关于 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC\">非确定性排序规则</a> 的部分。</p>\n</aside>\n</section>\n<section id=\"hstorefield\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">HStoreField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">HStoreField</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.contrib.postgres.fields.HStoreField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个用于存储键值对的字段。使用的 Python 数据类型是 <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code>。键必须是字符串，值可以是字符串或空值（Python 中的 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>）。</p>\n<p>要使用该字段，你需要：</p>\n<ol class=\"arabic simple\">\n<li><p>在你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 中增加 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code>。</p></li>\n<li><p>在 PostgreSQL 中 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/operations/#create-postgresql-extensions\"><span class=\"std std-ref\">安装 hstore 扩展</span></a>。</p></li>\n</ol>\n<p>如果你跳过第一步，你会看到一个错误，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">can't</span> <span class=\"pre\">adapt</span> <span class=\"pre\">type</span> <span class=\"pre\">'dict'</span></code>，如果你跳过第二步，你会看到 <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span> <span class=\"pre\">&quot;hstore&quot;</span> <span class=\"pre\">does</span> <span class=\"pre\">not</span> <span class=\"pre\">exist</span></code>。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>在某些情况下，可能需要要求或限制对某个字段有效的键。这可以使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/postgres/validators/#django.contrib.postgres.validators.KeysValidator\" title=\"django.contrib.postgres.validators.KeysValidator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">KeysValidator</span></code></a> 来完成。</p>\n</aside>\n<section id=\"querying-hstorefield\">\n<h3>查询 <code class=\"docutils literal notranslate\"><span class=\"pre\">HStoreField</span></code><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>除了按键查询的功能外，<code class=\"docutils literal notranslate\"><span class=\"pre\">HStoreField</span></code> 还有一些自定义查询功能。</p>\n<p>我们将使用以下示例模型：</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.contrib.postgres.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HStoreField</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">HStoreField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n<section id=\"key-lookups\">\n<span id=\"std-fieldlookup-hstorefield.key\"></span><h4>键查找<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>要根据给定的键查询，您可以将该键用作查找名称：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__breed</span><span class=\"o\">=</span><span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n<p>您可以在键查找后链接其他查询：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__breed__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;l&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n<p>或者使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> 表达式来注释一个键值。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">rufus</span> <span class=\"o\">=</span> <span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">breed</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;data__breed&quot;</span><span class=\"p\">))[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">rufus</span><span class=\"o\">.</span><span class=\"n\">breed</span>\n<span class=\"go\">&#39;labrador&#39;</span>\n</code></pre></div>\n<p>如果你想查询的键与另一个查找的名称冲突，你需要使用 <a class=\"reference internal\" href=\"#std-fieldlookup-hstorefield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">hstorefield.contains</span></code></a> 查找来代替。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>关键词转换也可以与以下链式进行： <a class=\"reference internal\" href=\"/zh-hans/4.2/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=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-endswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">endswith</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iendswith</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/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=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-regex\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">regex</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-iregex\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iregex</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/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=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">istartswith</span></code></a> 查询。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>由于任何字符串都可能是 hstore 值中的一个键，因此除了下面列出的以外的任何查询都将被解释为键查询。不会出现任何错误。要格外小心输入错误，并始终检查你的查询是否按照你的意图工作。</p>\n</aside>\n</section>\n<section id=\"std-fieldlookup-hstorefield.contains\">\n<span id=\"id1\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code><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><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\"><span class=\"pre\">HStoreField</span></code></a> 上重写了 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a> 查询。返回的对象是那些给定的键值对字典都包含在字段中的对象。它使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;&gt;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__contains</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__contains</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-hstorefield.contained_by\">\n<span id=\"id2\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></code><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>这是 <a class=\"reference internal\" href=\"#std-fieldlookup-hstorefield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a> 查询的反向操作 - 返回的对象将是那些对象的键值对是传递值中的子集。它使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;&#64;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__contained_by</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;, &lt;Dog: Fred&gt;]&gt;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__contained_by</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Fred&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"has-key\">\n<span id=\"std-fieldlookup-hstorefield.has_key\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">has_key</span></code><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>返回包含给定键的数据的对象。使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">?</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__has_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"has-any-keys\">\n<span id=\"std-fieldlookup-hstorefield.has_any_keys\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">has_any_keys</span></code><a class=\"heading-anchor\" href=\"#has-any-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>返回其中任何给定键存在于数据中的对象。使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">?|</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__has_any_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"has-keys\">\n<span id=\"std-fieldlookup-hstorefield.has_keys\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">has_keys</span></code><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>返回其中所有给定键都存在于数据中的对象。使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">?&amp;</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__has_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"keys\">\n<span id=\"std-fieldlookup-hstorefield.keys\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code><a class=\"heading-anchor\" href=\"#keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>返回键数组与给定值相等的对象。请注意，顺序不能保证可靠，因此此转换主要用于与 <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\"><span class=\"pre\">ArrayField</span></code></a> 上的查找一起使用。使用 SQL 函数 <code class=\"docutils literal notranslate\"><span class=\"pre\">akeys()</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;toy&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bone&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__keys__overlap</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;toy&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"values\">\n<span id=\"std-fieldlookup-hstorefield.values\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code><a class=\"heading-anchor\" href=\"#values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>返回值数组与给定值相等的对象。请注意，顺序不能保证可靠，因此此转换主要用于与 <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\"><span class=\"pre\">ArrayField</span></code></a> 上的查找一起使用。使用 SQL 函数 <code class=\"docutils literal notranslate\"><span class=\"pre\">avals()</span></code>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</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\">data__values__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"range-fields\">\n<span id=\"id3\"></span><h2>范围字段<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>有五种范围字段类型，对应 PostgreSQL 中内置的范围类型。这些字段用来存储一个范围的值，例如一个事件的开始和结束时间戳，或者一个活动适合的年龄范围。</p>\n<p>所有的范围字段在 Python 中都会翻译成 <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/basic/pgtypes.html#adapt-range\" title=\"(in psycopg)\"><span class=\"xref std std-ref\">psycopg Range 对象</span></a>，但如果不需要边界信息，也可以接受元组作为输入。默认是包含下界，不包含上界，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code> （有关 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-IO\">不同边界</a> 的详细信息，请参阅 PostgreSQL 文档）。对于非离散范围字段（例如 <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.DateTimeRangeField\" title=\"django.contrib.postgres.fields.DateTimeRangeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeRangeField</span></code></a> 和 <a class=\"reference internal\" href=\"#django.contrib.postgres.fields.DecimalRangeField\" title=\"django.contrib.postgres.fields.DecimalRangeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DecimalRangeField</span></code></a>），可以使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">default_bounds</span></code> 参数更改默认边界。</p>\n<section id=\"integerrangefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerRangeField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">IntegerRangeField</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.contrib.postgres.fields.IntegerRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>存储一组整数范围。基于 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>。在数据库中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">int4range</span></code> 表示，在 Python 中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.NumericRange</span></code> 表示。</p>\n<p>无论在保存数据时指定的边界是什么，PostgreSQL 总是以规范的形式返回一个包括下限和排除上限的范围，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code>。</p>\n</dd></dl>\n\n</section>\n<section id=\"bigintegerrangefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">BigIntegerRangeField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BigIntegerRangeField</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.contrib.postgres.fields.BigIntegerRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>存储一组大整数范围。基于 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BigIntegerField\" title=\"django.db.models.BigIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BigIntegerField</span></code></a>。在数据库中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">int8range</span></code> 表示，在 Python 中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.NumericRange</span></code> 表示。</p>\n<p>无论在保存数据时指定的边界是什么，PostgreSQL 总是以规范的形式返回一个包括下限和排除上限的范围，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code>。</p>\n</dd></dl>\n\n</section>\n<section id=\"decimalrangefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DecimalRangeField</span></code><a class=\"heading-anchor\" href=\"#decimalrangefield\"><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.DecimalRangeField\">\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\">DecimalRangeField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default_bounds</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=\"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.contrib.postgres.fields.DecimalRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>存储一组浮点数值范围。基于 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>。在数据库中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">numrange</span></code> 表示，在 Python 中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.NumericRange</span></code> 表示。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.DecimalRangeField.default_bounds\">\n<span class=\"sig-name descname\"><span class=\"pre\">default_bounds</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.DecimalRangeField.default_bounds\"><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=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>可选。列表和元组输入的 <code class=\"docutils literal notranslate\"><span class=\"pre\">bounds</span></code> 值。默认为包含下界，不包含上界，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code> （有关 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-IO\">不同边界</a> 的详细信息，请参阅 PostgreSQL 文档）。<code class=\"docutils literal notranslate\"><span class=\"pre\">default_bounds</span></code> 不用于 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.NumericRange</span></code> 输入。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"datetimerangefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeRangeField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DateTimeRangeField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default_bounds</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=\"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.contrib.postgres.fields.DateTimeRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>存储一组时间戳范围。基于 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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\">tstzrange</span></code> 表示，在 Python 中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.DateTimeTZRange</span></code> 表示。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.DateTimeRangeField.default_bounds\">\n<span class=\"sig-name descname\"><span class=\"pre\">default_bounds</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.DateTimeRangeField.default_bounds\"><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=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>可选。列表和元组输入的 <code class=\"docutils literal notranslate\"><span class=\"pre\">bounds</span></code> 值。默认为包含下界，不包含上界，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code> （有关 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-IO\">不同边界</a> 的详细信息，请参阅 PostgreSQL 文档）。<code class=\"docutils literal notranslate\"><span class=\"pre\">default_bounds</span></code> 不用于 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.DateTimeTZRange</span></code> 输入。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"daterangefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DateRangeField</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DateRangeField</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.contrib.postgres.fields.DateRangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>存储一组日期范围。基于 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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\">daterange</span></code> 表示，在 Python 中由 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.postgresql.psycopg_any.DateRange</span></code> 表示。</p>\n<p>无论在保存数据时指定的边界是什么，PostgreSQL 总是以规范的形式返回一个包括下限和排除上限的范围，即 <code class=\"docutils literal notranslate\"><span class=\"pre\">[)</span></code>。</p>\n</dd></dl>\n\n</section>\n<section id=\"querying-range-fields\">\n<h3>查询范围字段<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>对于范围字段，有许多自定义查找和转换。它们适用于所有上述字段，但我们将使用以下示例模型：</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.contrib.postgres.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">IntegerRangeField</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Event</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">ages</span> <span class=\"o\">=</span> <span class=\"n\">IntegerRangeField</span><span class=\"p\">()</span>\n    <span class=\"n\">start</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n<p>我们还将使用以下示例对象：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Soft play&quot;</span><span class=\"p\">,</span> <span class=\"n\">ages</span><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> <span class=\"n\">start</span><span class=\"o\">=</span><span class=\"n\">now</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Pub trip&quot;</span><span class=\"p\">,</span> <span class=\"n\">ages</span><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> <span class=\"n\">start</span><span class=\"o\">=</span><span class=\"n\">now</span> <span class=\"o\">-</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>和 <code class=\"docutils literal notranslate\"><span class=\"pre\">NumericRange</span></code>：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.backends.postgresql.psycopg_any</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NumericRange</span>\n</code></pre></div>\n<section id=\"containment-functions\">\n<h4>包含函数<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>与其他 PostgreSQL 字段一样，有三个标准的包含运算符。<code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">overlap</span></code>，分别使用 SQL 运算符 <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;&gt;</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;&#64;</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;&amp;</span></code>。</p>\n<section id=\"std-fieldlookup-rangefield.contains\">\n<span id=\"id4\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code><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><span class=\"n\">Event</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\">ages__contains</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-rangefield.contained_by\">\n<span id=\"id5\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></code><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><span class=\"n\">Event</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\">ages__contained_by</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></code> 查询也适用于非范围字段类型： <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.SmallAutoField\" title=\"django.db.models.SmallAutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SmallAutoField</span></code></a>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BigAutoField\" title=\"django.db.models.BigAutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BigAutoField</span></code></a>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.SmallIntegerField\" title=\"django.db.models.SmallIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SmallIntegerField</span></code></a>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BigIntegerField\" title=\"django.db.models.BigIntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BigIntegerField</span></code></a>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>, <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>, 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#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>。例如：</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.backends.postgresql.psycopg_any</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DateTimeTZRange</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">start__contained_by</span><span class=\"o\">=</span><span class=\"n\">DateTimeTZRange</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">hours</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">hours</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"std-fieldlookup-rangefield.overlap\">\n<span id=\"id6\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">overlap</span></code><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><span class=\"n\">Event</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\">ages__overlap</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"comparison-functions\">\n<h4>比较函数<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>范围字段支持标准查询：<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-lt\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">lt</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-gt\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">gt</span></code></a>、<a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-lte\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">lte</span></code></a> 和 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/querysets/#std-fieldlookup-gte\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">gte</span></code></a>。这些并没有特别大的帮助——它们先比较下界，然后在必要时才比较上界。这也是用于按范围字段排序的策略。最好是使用特定的范围比较运算符。</p>\n<section id=\"fully-lt\">\n<span id=\"std-fieldlookup-rangefield.fully_lt\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">fully_lt</span></code><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>返回的范围严格小于传入的范围。换句话说，返回范围内的所有点都小于传入范围内的所有点。</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\">Event</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\">ages__fully_lt</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"fully-gt\">\n<span id=\"std-fieldlookup-rangefield.fully_gt\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">fully_gt</span></code><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>返回的范围严格大于传入的范围。换句话说，返回范围内的所有点都大于传入范围内的所有点。</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\">Event</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\">ages__fully_gt</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"not-lt\">\n<span id=\"std-fieldlookup-rangefield.not_lt\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">not_lt</span></code><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>返回的范围不包含任何小于传入范围的点，即返回范围的下界至少是传入范围的下界。</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\">Event</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\">ages__not_lt</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;, &lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"not-gt\">\n<span id=\"std-fieldlookup-rangefield.not_gt\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">not_gt</span></code><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>返回的范围不包含任何大于传入范围的点，也就是说，返回的范围的上界最多就是传入范围的上界。</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\">Event</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\">ages__not_gt</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"adjacent-to\">\n<span id=\"std-fieldlookup-rangefield.adjacent_to\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">adjacent_to</span></code><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>返回的范围与传入的范围共享一个边界。</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\">Event</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\">ages__adjacent_to</span><span class=\"o\">=</span><span class=\"n\">NumericRange</span><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;QuerySet [&lt;Event: Soft play&gt;, &lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"querying-using-the-bounds\">\n<h4>使用边界进行查询<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>范围字段支持几个额外的查找。</p>\n<section id=\"startswith\">\n<span id=\"std-fieldlookup-rangefield.startswith\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">startswith</span></code><a class=\"heading-anchor\" href=\"#startswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>返回的对象具有给定的下界。可以链入基础字段的有效查找。</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\">Event</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\">ages__startswith</span><span class=\"o\">=</span><span class=\"mi\">21</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"endswith\">\n<span id=\"std-fieldlookup-rangefield.endswith\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">endswith</span></code><a class=\"heading-anchor\" href=\"#endswith\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>返回的对象具有给定的上界。可以链入基础字段的有效查找。</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\">Event</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\">ages__endswith</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Event: Soft play&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"isempty\">\n<span id=\"std-fieldlookup-rangefield.isempty\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">isempty</span></code><a class=\"heading-anchor\" href=\"#isempty\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>返回的对象是空的范围。可以链到有效的查找 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a>。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</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\">ages__isempty</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"lower-inc\">\n<span id=\"std-fieldlookup-rangefield.lower_inc\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">lower_inc</span></code><a class=\"heading-anchor\" href=\"#lower-inc\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>根据传递的布尔值，返回具有包含或不包含下界的对象。可以链到有效的查找 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a> 的对象。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</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\">ages__lower_inc</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Event: Soft play&gt;, &lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"lower-inf\">\n<span id=\"std-fieldlookup-rangefield.lower_inf\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">lower_inf</span></code><a class=\"heading-anchor\" href=\"#lower-inf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>根据传递的布尔值，返回具有无界（无限）或仅有下界的对象。可以链到有效的查找 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a>。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</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\">ages__lower_inf</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"upper-inc\">\n<span id=\"std-fieldlookup-rangefield.upper_inc\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">upper_inc</span></code><a class=\"heading-anchor\" href=\"#upper-inc\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>根据传递的布尔值，返回具有包含或不包含上界的对象。可以链到有效的查找 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a> 的对象。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</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\">ages__upper_inc</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"upper-inf\">\n<span id=\"std-fieldlookup-rangefield.upper_inf\"></span><h5><code class=\"docutils literal notranslate\"><span class=\"pre\">upper_inf</span></code><a class=\"heading-anchor\" href=\"#upper-inf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>根据传递的布尔值，返回具有无界（无限）或仅有上界的对象。可以链到有效的查找 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a>。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Event</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\">ages__upper_inf</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Event: Pub trip&gt;]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"defining-your-own-range-types\">\n<h3>定义自己的范围类型<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></h3>\n<p>PostgreSQL 允许定义自定义范围类型。Django 的模型和表单字段实现使用以下基类，并且 <code class=\"docutils literal notranslate\"><span class=\"pre\">psycopg</span></code> 提供了一个 <a class=\"reference external\" href=\"https://www.psycopg.org/psycopg3/docs/basic/pgtypes.html#psycopg.types.range.register_range\" title=\"(in psycopg)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">register_range()</span></code></a> 函数来允许使用自定义范围类型。</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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RangeField</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.contrib.postgres.fields.RangeField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>模型范围字段的基类。</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\"><span class=\"pre\">base_field</span></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>要使用的模型字段类。</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\"><span class=\"pre\">range_type</span></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>要使用的范围类型。</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\"><span class=\"pre\">form_field</span></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>要使用的表单字段类。应该是 <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\"><span class=\"pre\">django.contrib.postgres.forms.BaseRangeField</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">django.contrib.postgres.forms.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseRangeField</span></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>表范围字段的基类。</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\"><span class=\"pre\">base_field</span></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>要使用的表字段。</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\"><span class=\"pre\">range_type</span></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>要使用的范围类型。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"range-operators\">\n<h3>范围操作<a class=\"heading-anchor\" href=\"#range-operators\"><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.RangeOperators\">\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\">RangeOperators</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeOperators\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>PostgreSQL 提供了一组 SQL 运算符，这些运算符可以和范围数据类型一起使用（参见  <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>the PostgreSQL documentation for the full details of range operators <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_ ）。这个类的目的是作为一种方便的方法，以避免排版错误。运算符名称与相应的查找名称重叠。</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RangeOperators</span><span class=\"p\">:</span>\n    <span class=\"n\">EQUAL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;=&quot;</span>\n    <span class=\"n\">NOT_EQUAL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;&gt;&quot;</span>\n    <span class=\"n\">CONTAINS</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;@&gt;&quot;</span>\n    <span class=\"n\">CONTAINED_BY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;@&quot;</span>\n    <span class=\"n\">OVERLAPS</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&amp;&amp;&quot;</span>\n    <span class=\"n\">FULLY_LT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;&lt;&quot;</span>\n    <span class=\"n\">FULLY_GT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&gt;&gt;&quot;</span>\n    <span class=\"n\">NOT_LT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&amp;&gt;&quot;</span>\n    <span class=\"n\">NOT_GT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&amp;&lt;&quot;</span>\n    <span class=\"n\">ADJACENT_TO</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;-|-&quot;</span>\n</code></pre></div>\n</section>\n<section id=\"rangeboundary-expressions\">\n<h3>RangeBoundary() 表达式<a class=\"heading-anchor\" href=\"#rangeboundary-expressions\"><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.RangeBoundary\">\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\">RangeBoundary</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">inclusive_lower</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\">inclusive_upper</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.contrib.postgres.fields.RangeBoundary\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeBoundary.inclusive_lower\">\n<span class=\"sig-name descname\"><span class=\"pre\">inclusive_lower</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeBoundary.inclusive_lower\"><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\">True</span></code> （默认），则下界为包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'['</span></code>，否则为不包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'('</span></code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.fields.RangeBoundary.inclusive_upper\">\n<span class=\"sig-name descname\"><span class=\"pre\">inclusive_upper</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.fields.RangeBoundary.inclusive_upper\"><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\">False</span></code> （默认），则上界为包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">')'</span></code>，否则为不包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">']'</span></code>。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RangeBoundary()</span></code> 表达式表示范围边界。它可以与自定义的范围函数一起使用，预期边界，例如定义 <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ExclusionConstraint</span></code>。参见 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>the PostgreSQL documentation for the full details <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_ 。</p>\n</section>\n</section>","rootId":"postgresql-specific-model-fields","toc":[{"title":"对这些字段进行索引","anchor":"indexing-these-fields","children":[]},{"title":"ArrayField","anchor":"arrayfield","children":[{"title":"查询 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":"索引转换","anchor":"index-transforms","children":[]},{"title":"切片转换","anchor":"slice-transforms","children":[]}]}]},{"title":"CIText 字段","anchor":"citext-fields","children":[]},{"title":"HStoreField","anchor":"hstorefield","children":[{"title":"查询 HStoreField","anchor":"querying-hstorefield","children":[{"title":"键查找","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_any_keys","anchor":"has-any-keys","children":[]},{"title":"has_keys","anchor":"has-keys","children":[]},{"title":"keys","anchor":"keys","children":[]},{"title":"values","anchor":"values","children":[]}]}]},{"title":"范围字段","anchor":"range-fields","children":[{"title":"IntegerRangeField","anchor":"integerrangefield","children":[]},{"title":"BigIntegerRangeField","anchor":"bigintegerrangefield","children":[]},{"title":"DecimalRangeField","anchor":"decimalrangefield","children":[]},{"title":"DateTimeRangeField","anchor":"datetimerangefield","children":[]},{"title":"DateRangeField","anchor":"daterangefield","children":[]},{"title":"查询范围字段","anchor":"querying-range-fields","children":[{"title":"包含函数","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":"比较函数","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":"使用边界进行查询","anchor":"querying-using-the-bounds","children":[{"title":"startswith","anchor":"startswith","children":[]},{"title":"endswith","anchor":"endswith","children":[]},{"title":"isempty","anchor":"isempty","children":[]},{"title":"lower_inc","anchor":"lower-inc","children":[]},{"title":"lower_inf","anchor":"lower-inf","children":[]},{"title":"upper_inc","anchor":"upper-inc","children":[]},{"title":"upper_inf","anchor":"upper-inf","children":[]}]}]},{"title":"定义自己的范围类型","anchor":"defining-your-own-range-types","children":[]},{"title":"范围操作","anchor":"range-operators","children":[]},{"title":"RangeBoundary() 表达式","anchor":"rangeboundary-expressions","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.2/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/4.2/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/zh-hans/4.2/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/expressions","title":"PostgreSQL 特有查询表达式","url":"/zh-hans/4.2/ref/contrib/postgres/expressions/"},"next":{"docname":"ref/contrib/postgres/forms","title":"PostgreSQL 特有表单字段和部件","url":"/zh-hans/4.2/ref/contrib/postgres/forms/"},"formats":{"html":"/zh-hans/4.2/ref/contrib/postgres/fields/","markdown":"/zh-hans/4.2/ref/contrib/postgres/fields.md","json":"/zh-hans/4.2/ref/contrib/postgres/fields.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/contrib/postgres/fields.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/ref/contrib/postgres/fields/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}