无法删除Django模型中的主键属性

时间:2015-12-14 00:11:04

标签: python django

我创建了一个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对象?

1 个答案:

答案 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