3

私はSOで同様の質問を知っていますが、私の質問には誰も答えません。

私は次のモデルを持っています:

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

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

複数のアイテムが同じスタイルを持つことができるため、1 対 1 の関係ではありません。ただし、1 つのアイテムを Featured_item にできるのは 1 つのスタイルのみです。

is_featured_itemモデルにブール値フィールドを追加することもできますItemが、そうすると管理が複雑になります。

この循環依存を解決する方法はありますか?

4

2 に答える 2

4

モデル オブジェクト自体ではなく、モデルの名前 ( docs を参照) を使用できます。

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

が 1 つのスタイルしかItem持てない場合、これは がテーブル全体で一意でなければならないことを意味します。featured_itemfeatured_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

于 2012-11-02T13:26:17.137 に答える