2016-08-18 15 views
0

の唯一のインスタンスを持っていることができます。DjangoのモデルAは、私は2つのモデルを持っているモデルB

class ModelA(models.Model): 
    name = models.CharField(max_length=256) 

class ModelB(models.Model): 
    user = models.ForeignKey(MyUser) 
    model_a = models.ForeignKey(ModelA) 
    points = models.IntegerField(default=0) 

をどのように私は、同じオブジェクトを作成防ぐことができますか?例:

私はModelAのA、B、Cインスタンスと2人のユーザーを持っています。 ModelBでは、次のような関係が必要です。

User1は、A、1〜Bなどと 'リンク'が1つしかありません。 User2は同じです。彼は各ModelAインスタンスに「リンク」することができます。

各ユーザーは、ModelAに関連付けられたModelBに1つのレコードを持つことができます。

など。 (ユーザー1、A、100)、(ユーザー2、A、50) しかし、私は、DBのUSER1のレコード、およびA、及び広告ポイントから取得する必要があり、この

...create(user=User1, model_a=A, points=50) 

ような何かをしようとする場合には、他の類似したモデルを作成しません。

+0

1対1の関係が存在する場合、私は、あなたの質問を理解していない、あなたがもし、このような – Sayse

+0

としてそれを定義する必要がありますModel_aにOneToOneを追加すると、同じModelAを別のユーザーに追加できません。 – mrsolupo

+1

次に、ModelAが多数あるので、ユーザーは外部キーを定義する必要があります。 – Sayse

答えて

1

usermodel_aのすべてのペアを一意にする必要があります。これはunique_togetherを使用してモデルのメタデータで指定できます。

unique_together = (("driver", "restaurant"),)

これは が一緒に考慮した場合一意である必要がありますタプルのタプルです。これはDjangoの管理者で使用され、 にデータベースレベルで適用されます(つまり、適切なUNIQUEステートメントはCREATE TABLEステートメントに含まれる です)。したがって

Django documentation - unique_together

方法を以下にあなたのモデルを変更:

class ModelB(models.Model): 
    user = models.ForeignKey(MyUser) 
    model_a = models.ForeignKey(ModelA) 
    points = models.IntegerField(default=0) 

    class Meta: 
     unique_together = (('user', 'model_a'),) 
+0

ありがとう、私はこの独特の外見をどこで捕まえることができますか? (発生したとき)前にいくつかのコードを追加するのですか? – mrsolupo

関連する問題