我创建了一个WorkRelation对象,它有一个链接到Contact对象的属性联系人。这是我的 models.py :
class WorkRelation(BaseModel):
contact = models.OneToOneField(Contact, on_delete=models.CASCADE)
limit = models.Q(app_label='groups', model="company") | models.Q(app_label='groups', model="bond")
group_type = models.ForeignKey(ContentType, limit_choices_to=limit)
group_id = models.PositiveIntegerField()
group = GenericForeignKey('group_type', 'group_id')
class Meta:
app_label = 'groups'
def __str__(self):
return "Function %s" % self.group.__str__()
不知何故,我无法创建链接到同一个联系人的多个workrelation对象,当我在Django管理员中尝试这个时,我收到以下错误:
此联系人的工作关系已存在。
这对我没有意义,因为据我所知,我并不是说联系对象应该是唯一的。有谁知道我应该如何调整这个模型,以便能够使用相同的联系人制作多个WorkRelation对象?
答案 0 :(得分:4)
您正在使用models.OneToOneField
,只允许一个 contact
和一个 WorkRelation
之间的关系。如果您要为多个contact
重复使用某个WorkRelations
,则需要使用models.ForeignKey
:
class WorkRelation(BaseModel):
contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
这里有一个很好的解释:
What's the difference between django OneToOneField and ForeignKey?
您可以在(优秀的)Django文档中了解更多有关差异的内容:
https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey https://docs.djangoproject.com/en/1.9/ref/models/fields/#onetoonefield