2012-12-27 60 views
0

如何處理模型(A)依賴於模型(B)被定義,但模型(B)也依賴於模型(A)被定義的情況。Django模型定義競賽

舉例來說,我有

class event(models.Model): 
    competition_start = models.DateField() 
    competitors = models.ManyToManyField(picture) 
    results = models.CommaSeparatedIntegerField(max_length=20) 

class picture(models.Model): 
    uploader = models.OneToOneField(UserProfile) 
    upload_date = models.DateField() 
    image = models.ImageField(upload_to="media") 
    score = models.DecimalField(max_digits=10,decimal_places=10) 
    score_RD = models.DecimalField(max_digits=10,decimal_places=10) 
    rated = models.BooleanField() 
    last_competed = models.DateField() 
    competition = models.OneToOneField(event) 

競爭者場依靠畫面被定義,但圖片依賴於被定義的事件。請注意,每個圖片(A)與事件共享一對一的關係,但該事件可能涉及多個其他圖片(set(S)-A)。

我試着換過來把

competitors = models.ManyToManyField(picture) 
user_pic = models.OneToOneField(picture) 

事件的內部和擺脫領域「競爭」的,但我相信SQL不允許這樣做。有人能解釋爲什麼嗎?

如果我需要一個字段的OneToOne關係並且與另一個字段的ManyToMany關係需要執行什麼修復? (兩個相同的類之間)

謝謝:)

回答

2

您可以在類名的字符串的OneToOneForeignKey的定義中傳遞,並將它評爲「懶洋洋地」。

competitors = models.ManyToManyField('picture') 

另外,模型類名的約定是駱駝情況(例如「圖像」 =>「圖片」,「事件」 =>「事件」)。

+0

啊......非常感謝你;它似乎已經解決了這個問題。但是,您是否可以解釋爲什麼您可以在與圖片具有OneToOne關係的事件中擁有一個字段,並且圖片可以具有與事件具有ManyToMany關係的字段。但是,如果一個人與圖片之間存在ManyToMany關係而另一個人與圖片之間存在OneToOne關係,則不能擁有兩個字段? – user1431282

+0

你沒有理由不能這樣做。你試用時會得到什麼錯誤? – sdolan

1
class event(models.Model): 
    competition_start = models.DateField() 
    competitors = models.ManyToManyField('MODULE.picture') 
    results = models.CommaSeparatedIntegerField(max_length=20) 
    ... 

此外,根據定義,您不能同時擁有一對一和多對多。我認爲你希望Picture類的關係不是一對一的外鍵。