我在SO中也知道类似的问题,但没有人回答我的问题。
我有以下型号:
class Style(models.Model):
featured_item = models.ForeignKey(Item)
class Item(models.Model):
style = models.ForeignKey(Style)
这不是一对一的关系,因为几个项目可以具有相同的风格。但是,一个项目只能是一个样式的feature_item。
我可以在is_featured_item
模型中添加Item
布尔字段,但这会让我的管理员更复杂。
有没有办法解决这种循环依赖?
答案 0 :(得分:4)
您可以使用模型的名称(see docs),而不是模型对象本身:
class Item(models.Model):
style = models.ForeignKey('app_name.Style')
答案 1 :(得分: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
中显示。{/ p>