[英]Django model one foreign key to many tables
所以我有一個問題,我正在考慮創建一個具有其他幾個表的外鍵的單個表,並使用另一個字段“type”來說明該鍵應該屬於哪個表。
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個外鍵擁有數據而另外兩個必須為空? 或者我是否必須在db端嚴格設置此約束。(我正在使用postgres)我希望能夠告訴django在創建db時這樣做,所以我不必記住每次有人重新創建數據庫。
任何意見或建議將不勝感激。 我沒有和這些想法中的任何一個結婚,所以如果有另一種聰明的方法來達到同樣的效果,我就能聽到它。 感謝您的時間。
編輯:我正在使用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">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.