6

「スルーを使ったManyToManyField」は中間モデルを使います
通常、中間フィールドを使わないとm2m関係がユニークになり、重複データを持つことができません。

中級モデル使用後。m2m 間の関係は同じデータを持つことができます。このような

|    |    ['0'] (
|    |    |    addToProfile => Array (0)
|    |    |    (
|    |    |    )
|    |    |    endDate =  NULL
|    |    |    feedType =  "N"
|    |    |    id =  1
|    |    |    info =  "Big Kuy No Fear"
|    |    |    likeMaker => Array (3)
|    |    |    (
|    |    |    |    ['0'] =  "/api/v2/user/2/"
|    |    |    |    ['1'] =  "/api/v2/user/2/"
|    |    |    |    ['2'] =  "/api/v2/user/2/"
|    |    |    )
|    |    |    like_count =  "3"

ソーシャルネットワークを構築しています。これは 3 つlike_countの s を持つ私のフィード オブジェクトです。しかし、このような3つは同じユーザー「/api/v2/user/2/」から来ています

m2mフィールドに「unique=True」属性を追加しようとしましたが、djangoは最初にm2mフィールドに「unique」属性を追加する許可を与えていないため、エラーが発生します。誰でも私を助けることができますか?

4

3 に答える 3

11

中間モデルでunique_togetherを使用してみてください。

class M2MModel(models.Model):
    field1 = models.ForeignKey(Model1)
    field2 = models.ForeignKey(Model2)

    class Meta:
        unique_together = ('field1', 'field2')
于 2013-02-07T14:58:11.150 に答える
3

unique_together は M2M 関係では機能しません。詳細情報.

于 2014-04-08T19:34:40.527 に答える
1

あなたの要件に非常に似た機能を完成させましたが、私の選択は別の単純なモデルを中間モデルとして使用することです。

これが私のコードです。

class Vote(models.Model):
    class Meta:
        unique_together = ['content', 'by']

    content = models.ForeignKey(Content)
    by = models.ForeignKey(User)

私の場合、ManyToManyField を実装する利点はありません。

更新:ここから、Django が ManyToManyField に対して組み込みを一意にするつもりはないことがわかりました。一意にするために、独自の検証を実装する必要があります。

于 2013-02-07T18:21:49.333 に答える