gpt4 book ai didi

python - Django 模型一个外键到多个表

转载 作者:太空狗 更新时间:2023-10-29 20:43:30 24 4
gpt4 key购买 nike

所以我有一个问题,我正在考虑创建一个表,该表具有到其他几个表的外键,并使用另一个字段“类型”来说明该键应该属于哪个表。

class Status(Models.model):
request = models.ForeignKey("Request1", "Request2", "Request3")
request_type = models.IntegerField()
...Some status related data

class Request1(Models.model):
...Some data

class Request2(Models.model):
...Some other data

Class Request3(Models.model):
...different data

我的问题是,是否可以这样定义外键?我想到的另一个解决方案是像这样定义我的模型

class Status(Models.model):
request1 = models.ForeignKey("Request1")
request2 = models.ForeignKey("Request2")
request3 = models.ForeignKey("Request3")
...Some status related data

class Request1(Models.model):
...Some data

class Request2(Models.model):
...Some other data

Class Request3(Models.model):
...different data

但是,如果我这样做,是否可以通过 django 定义一个约束,表示只允许 1 个外键拥有数据,而其他两个必须为空?或者我是否必须在数据库端严格设置此约束。(我正在使用 postgres)我希望能够告诉 django 在创建数据库时这样做,这样我就不必每次都记住有人重新创建数据库。

如有任何意见或建议,我们将不胜感激。我对这两种想法都不感兴趣,所以如果有另一种聪明的方法可以达到同样的效果,我很乐意听到。感谢您的时间。

编辑:我使用的是 django 1.7.10

最佳答案

您应该使用 Django 中的 contentypes 框架。

这里有一个通用关系的例子:https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#generic-relations根据您的要求,它可能看起来像这样:

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Status(models.Model):
request_type = models.ForeignKey(ContentType)
request_id = models.PositiveIntegerField()
request = GenericForeignKey('request_type', 'request_id')

然后您可以执行以下操作:

status1 = Status(request=Request1("foo"))
status1.save()
status2 = Status(request=Request2("bar"))
status2.save()

status1.request // <Request1 "foo">
status2.request // <Request2 "bar">

关于python - Django 模型一个外键到多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com