Django中的循环依赖

时间:2012-11-02 12:58:44

标签: django

我在SO中也知道类似的问题,但没有人回答我的问题。

我有以下型号:

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

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

这不是一对一的关系,因为几个项目可以具有相同的风格。但是,一个项目只能是一个样式的feature_item。

我可以在is_featured_item模型中添加Item布尔字段,但这会让我的管理员更复杂。

有没有办法解决这种循环依赖?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

如果Item只有featured_item个样式,那么这意味着featured_itemStyle表格中必须是唯一的。

怎么样:

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中显示。{/ p>