3

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

我有以下型号:

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

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

这不是一对一的关系,因为多个项目可以具有相同的样式。但是,一个项目只能是一种 Style 的 features_item。

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

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

4

2 回答 2

4

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

class Item(models.Model):      
    style = models.ForeignKey('app_name.Style')
于 2012-11-02T13:22:43.260 回答
1

如果 inItem只能是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子句,以便 anItem只能出现在Style它所属的部分中。

于 2012-11-02T13:26:17.137 回答