{"title":"一对一关联","version":"4.2","locale":"zh-hans","docname":"topics/db/examples/one_to_one","url":"/zh-hans/4.2/topics/db/examples/one_to_one/","canonical":"https://djangodocs.dev/zh-hans/4.2/topics/db/examples/one_to_one/","summary":"要定义一对一关联，使用 OneToOneField 。 在本例中，一个 Place 可是一个 Restaurant : Code Copy from django.db import models class Place ( models . Model ): name = models . CharField (…","html":"<h1>一对一关联<a class=\"heading-anchor\" href=\"#one-to-one-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>要定义一对一关联，使用 <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\">OneToOneField</code></a>。</p>\n<p>在本例中，一个 <code class=\"docutils literal notranslate\">Place</code> 可是一个 <code class=\"docutils literal notranslate\">Restaurant</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=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Place</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    address <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">80</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"si\">}</span><span class=\"s2\"> the place&quot;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Restaurant</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    place <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>\n        Place<span class=\"p\">,</span>\n        on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span>\n        primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    serves_hot_dogs <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    serves_pizza <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> the restaurant&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>place<span class=\"o\">.</span>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Waiter</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    restaurant <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Restaurant<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> the waiter at </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>restaurant<span class=\"p\">)</span>\n</code></pre></div>\n<p>下面是可以使用PythonAPI工具执行的操作示例。</p>\n<p>创建几个 <code class=\"docutils literal notranslate\">Places</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>p1 <span class=\"o\">=</span> Place<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Demon Dogs&quot;</span><span class=\"p\">,</span> address<span class=\"o\">=</span><span class=\"s2\">&quot;944 W. Fullerton&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p1<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p2 <span class=\"o\">=</span> Place<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Ace Hardware&quot;</span><span class=\"p\">,</span> address<span class=\"o\">=</span><span class=\"s2\">&quot;1013 N. Ashland&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p2<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>创建一个餐厅。将“parent”对象作为此对象的主键传递：</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>r <span class=\"o\">=</span> Restaurant<span class=\"p\">(</span>place<span class=\"o\">=</span>p1<span class=\"p\">,</span> serves_hot_dogs<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> serves_pizza<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>save<span class=\"p\">()</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>r<span class=\"o\">.</span>place\n<span class=\"go\">&lt;Place: Demon Dogs the place&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>p1<span class=\"o\">.</span>restaurant\n<span class=\"go\">&lt;Restaurant: Demon Dogs the restaurant&gt;</span>\n</code></pre></div>\n<p>p2 没有关联的餐厅：</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=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ObjectDoesNotExist\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">try</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    p2<span class=\"o\">.</span>restaurant\n<span class=\"gp\">... </span><span class=\"k\">except</span> ObjectDoesNotExist<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There is no restaurant here.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">There is no restaurant here.</span>\n</code></pre></div>\n<p>您还可以使用 <code class=\"docutils literal notranslate\">hasattr</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=\"nb\">hasattr</span><span class=\"p\">(</span>p2<span class=\"p\">,</span> <span class=\"s2\">&quot;restaurant&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">False</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>r<span class=\"o\">.</span>place <span class=\"o\">=</span> p2\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p2<span class=\"o\">.</span>restaurant\n<span class=\"go\">&lt;Restaurant: Ace Hardware the restaurant&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>r<span class=\"o\">.</span>place\n<span class=\"go\">&lt;Place: Ace Hardware the place&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>p1<span class=\"o\">.</span>restaurant <span class=\"o\">=</span> r\n<span class=\"gp\">&gt;&gt;&gt; </span>p1<span class=\"o\">.</span>restaurant\n<span class=\"go\">&lt;Restaurant: Demon Dogs the restaurant&gt;</span>\n</code></pre></div>\n<p>请注意，在将对象分配给一对一关系之前，您必须先保存该对象。例如，使用未保存的 <code class=\"docutils literal notranslate\">Place</code> 创建一个 <code class=\"docutils literal notranslate\">Restaurant</code> 会引发 <code class=\"docutils literal notranslate\">ValueError</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>p3 <span class=\"o\">=</span> Place<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Demon Dogs&quot;</span><span class=\"p\">,</span> address<span class=\"o\">=</span><span class=\"s2\">&quot;944 W. Fullerton&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>place<span class=\"o\">=</span>p3<span class=\"p\">,</span> serves_hot_dogs<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> serves_pizza<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValueError</span>: save() prohibited to prevent data loss due to unsaved related object &#39;place&#39;.\n</code></pre></div>\n<p>Restaurant.objects.all() 返回的是餐厅，而不是地点。请注意，有两家餐厅 - Ace Hardware 餐厅是在调用 r.place = p2 时创建的：</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>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Restaurant: Demon Dogs the restaurant&gt;, &lt;Restaurant: Ace Hardware the restaurant&gt;]&gt;</span>\n</code></pre></div>\n<p>Place.objects.all() 返回所有地点，不管它们是否有餐厅：</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>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Place: Ace Hardware the place&gt;, &lt;Place: Demon Dogs the place&gt;]&gt;</span>\n</code></pre></div>\n<p>您可以使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/db/queries/#lookups-that-span-relationships\"><span class=\"std std-ref\">跨关系的查找</span></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>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>place<span class=\"o\">=</span>p1<span class=\"p\">)</span>\n<span class=\"go\">&lt;Restaurant: Demon Dogs the restaurant&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>place__pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Restaurant: Demon Dogs the restaurant&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>place__name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Demon&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Restaurant: Demon Dogs the restaurant&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>exclude<span class=\"p\">(</span>place__address__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Ashland&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Restaurant: Demon Dogs the restaurant&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>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Place: Demon Dogs the place&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>restaurant__place<span class=\"o\">=</span>p1<span class=\"p\">)</span>\n<span class=\"go\">&lt;Place: Demon Dogs the place&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>restaurant<span class=\"o\">=</span>r<span class=\"p\">)</span>\n<span class=\"go\">&lt;Place: Demon Dogs the place&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>restaurant__place__name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Demon&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Place: Demon Dogs the place&gt;</span>\n</code></pre></div>\n<p>如果你删除一个地方，它的餐馆将被删除（假设 <code class=\"docutils literal notranslate\">OneToOneField</code> 是用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\">on_delete</code></a> 设置为 <code class=\"docutils literal notranslate\">CASCADE</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>p2<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"go\">(2, {&#39;one_to_one.Restaurant&#39;: 1, &#39;one_to_one.Place&#39;: 1})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Restaurant: Demon Dogs the restaurant&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>w <span class=\"o\">=</span> r<span class=\"o\">.</span>waiter_set<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>w\n<span class=\"go\">&lt;Waiter: Joe the waiter at Demon Dogs the restaurant&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>Waiter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>restaurant__place<span class=\"o\">=</span>p1<span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Waiter: Joe the waiter at Demon Dogs the restaurant&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Waiter<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>restaurant__place__name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Demon&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Waiter: Joe the waiter at Demon Dogs the restaurant&gt;]&gt;</span>\n</code></pre></div>","rootId":"one-to-one-relationships","toc":[],"breadcrumbs":[{"docname":"topics/index","title":"使用 Django","url":"/zh-hans/4.2/topics/"},{"docname":"topics/db/index","title":"模型和数据库","url":"/zh-hans/4.2/topics/db/"},{"docname":"topics/db/examples/index","title":"模型关联 API 用法示例","url":"/zh-hans/4.2/topics/db/examples/"}],"prev":{"docname":"topics/db/examples/many_to_one","title":"多对一关联","url":"/zh-hans/4.2/topics/db/examples/many_to_one/"},"next":{"docname":"topics/http/index","title":"处理 HTTP 请求","url":"/zh-hans/4.2/topics/http/"},"formats":{"html":"/zh-hans/4.2/topics/db/examples/one_to_one/","markdown":"/zh-hans/4.2/topics/db/examples/one_to_one.md","json":"/zh-hans/4.2/topics/db/examples/one_to_one.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/topics/db/examples/one_to_one.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/topics/db/examples/one_to_one/","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"]}