2012-11-02 58 views
3

我知道在SO類似的問題,但沒有回答我的問題。在Django循環依賴

我有以下型號:

class Style(models.Model):  
    featured_item = models.ForeignKey(Item) 

class Item(models.Model):  
    style = models.ForeignKey(Style) 

這不是一對一的關係,因爲幾個項目可以有相同的風格。但是,一個項目可以是隻有一個Style的featured_item。

我可以在我的Item模型中添加一個is_featured_item布爾型字段,但這會讓我的管理更加複雜。

有什麼辦法解決這個循環依賴?

+0

我會用'is_featured_item'去。 – rantanplan

回答

4

您可以使用該模型(see docs),而不是模型對象本身的名稱:

class Item(models.Model):  
    style = models.ForeignKey('app_name.Style') 
+0

這並不回答OP的問題。這是錯的。循環依賴依然存在。 – rantanplan

+0

好吧,可能是我誤解了這個問題。 –

+0

它確實有效。謝謝。我還將'related_name ='+''添加到'featured_item'字段,因爲我不需要向後關係。 – jul

1

如果在Item可以只有一種風格featured_item,那麼這意味着featured_item必須在Style表中是唯一的。

什麼:

class Style(models.Model):  
    featured_item = models.ForeignKey(Item, unique = True) 

,然後將其等同於做:

class Style(models.Model):  
    featured_item = models.OneToOneField('Item', related_name = 'featured_in') # Style -> Item relationshio 

class Item(models.Model):  
    style = models.ForeignKey(' Style') # Items -> Style relationship 

,讓你每個Item向後關係,告訴你在哪個Style它的特點是,除了前向關係,告訴你它屬於哪種風格。

我猜你可能會想使用limit_choices_to條款,這樣的Item只能在Style它的一部分功能。