2012-11-02 53 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它的一部分功能。