Django中的循环依赖

Django中的循环依赖,django,Django,我知道SO中有类似的问题,但没有人回答我的问题 我有以下型号: class Style(models.Model): featured_item = models.ForeignKey(Item) class Item(models.Model): style = models.ForeignKey(Style) 这不是一对一的关系,因为几个项目可以具有相同的样式。但是,一个项目只能是一种风格的特色项目 我可以在我的item模型中添加一个is\u fe

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

我有以下型号:

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

class Item(models.Model):      
    style = models.ForeignKey(Style)
这不是一对一的关系,因为几个项目可以具有相同的样式。但是,一个项目只能是一种风格的特色项目

我可以在我的
item
模型中添加一个
is\u featured\u item
布尔字段,但这会使我的管理更加复杂


有没有办法解决这个循环依赖关系?

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

class Item(models.Model):      
    style = models.ForeignKey('app_name.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
它为每个
项目
提供了一个向后关系,告诉您它在哪个
样式
中起作用,此外还提供了向前关系,告诉您它属于哪个样式


我想你可能会想使用
限制选项到
子句,这样
项目只能在
样式中显示。

这并不能回答OP的问题。这是错误的。循环依赖仍然存在。嗯,可能我误解了这个问题。它确实有效。谢谢我还将
related\u name='+'
添加到
featured\u item
字段,因为我不需要反向关系。我将使用
is\u featured\u item