2011-11-21 69 views
-2

Possible Duplicate:
Django: Why some fields clashes with otherDjango的模型多ForeignKey的一個表

我試着描述模型,但Django的報告一些錯誤。我可以修復一些錯誤,但無法修復所有錯誤。然後我不會改變它來更清楚地描述我的目的:

from django.db import models 

class Person(models.Model): 
    name = models.CharField(max_length=128) 
    father_is = models.ForeignKey('self') 

    def __unicode__(self): 
     return self.name 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 
    led_by = models.ForeignKey(Person) 

    def __unicode__(self): 
     return self.name 

class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 
    date_joined = models.DateField() 
    invite_reason = models.CharField(max_length=64) 
    invited_by = models.ForeignKey(Person) # who invited this person to this group 

你能否給我一個解決方案,請問? (這是2個字段的錯誤:led_by和invited_by) 非常感謝! PS:我剛開始學習Django。

編輯:現在我知道這是關於Django的ORM的限制。 OFFTOPIC!

+1

請張貼錯誤 – second

+0

錯誤:一個或多個模型沒有驗證: member.group:訪問者現場「led_by」與相關M2M領域「Person.group_set」衝突。爲'led_by'的定義添加一個related_name參數。 member.group:中介模型成員對Person有多個外鍵,這是不明確且不被允許的。 member.group:m2m字段'member'的訪問者與相關字段'Person.group_set'衝突。將'related_name'參數添加到'members'的定義中。 – Locke

+0

member.membership:字段'person'的訪問者與相關字段'Person.membership_set'發生衝突。將'related'參數添加到'person'的定義中。 member.membership:字段'invite_by'的訪問者與相關字段'Person.membership_set'發生衝突。將「related_name」參數添加到「invite_by」的定義中。 – Locke

回答

4

是在單個模型上有多個外鍵屬於同一類型的問題?在這種情況下,django無法爲您設置自動向後關係,因此您需要明確指定related_name。有關說明

the docs

編輯:從你的錯誤 ,似乎正是這個問題。它甚至會告訴你該怎麼做:

Add a related_name argument to the definition for 'members'

EDIT2: 好了,現在我們取得了一些進展。儘管如此,答案仍然是「閱讀文檔」。從docs on using through relations(強調):

There are a few restrictions on the intermediate model:

  • Your intermediate model must contain one - and only one - foreign key to the target model (this would be Person in our example). If you have more than one foreign key, a validation error will be raised.

  • Your intermediate model must contain one - and only one - foreign key to the source model (this would be Group in our example). If you have more than one foreign key, a validation error will be raised.

+0

是的,我知道它(add related_name),但它不能解決「invite_by」上的問題。也許我需要改變我的模型。你有什麼想法嗎? – Locke

+0

您是否已將'related_name'添加到您的錯誤消息所建議的所有模型的所有字段?你有新的錯誤信息嗎? – second

+0

我將它添加到了所有的新錯誤消息中: 錯誤:一個或多個模型未驗證: 成員。group:中介模型Membership對於Person有多個外鍵,這是不明確的,不允許的。 就像我說過的,也許我需要改變模型。你有什麼想法嗎? – Locke