2015-12-14 32 views
0

我做了一個WorkRelation對象,該對象具有鏈接到Contact對象的屬性聯繫人。這是我的models.py無法刪除Django模型中的主鍵屬性

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管理我得到以下錯誤:

Work relation with this Contact already exists.

這對我來說沒有意義,因爲據我所知,我不認爲聯繫對象應該是唯一的。是否有人知道我應該如何調整此模型,以便可以使用同一聯繫人制作多個WorkRelation對象?

回答

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