Django中的循环依赖
我知道SO中有类似的问题,但没有人回答我的问题 我有以下型号: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
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
。