1

複合キーを持つ 2 つのモデルがあります。

class ContestUser(models.Model):
    user_id = models.IntegerField(primary_key = True)
    contest_id = models.IntegerField(primary_key = True)
    username = models.CharField(max_length = 1536, blank = True)
    .
    .
    .



class ContestRegistration(models.Model):
    user_id = models.IntegerField(primary_key = True)
    contest_id = models.IntegerField(primary_key = True)
    status = models.IntegerField(choices = EJUDGE_CONTEST_STATUSES)
    .
    .
    .

最初の質問は、それらをどのように関連付け、結合のようにクエリを実行できるかです。

ContestRegistration から * を選択し、r.user_id = u.user_id および r.contest_id = u.contest_id で ContestUser u に参加します。ここで、r.contest_id = 3;

2番目は、このようなオブジェクトを保存する方法ですか?

cuser = ContestUser.objects.get(user_id = 1, contest_id = 1)
cuser.username = 'username'
cuser.save()

これにより、IntegrityError: (1062、「キー 'PRIMARY' のエントリ '1-1' が重複しています」) が発生します。

実行される SQL は次のとおりです。

SELECT * FROM `users` WHERE (`users`.`contest_id` = 1  AND `users`.`user_id` = 1 );
SELECT (1) AS `a` FROM `users` WHERE `users`.`user_id` = 1  LIMIT 1;
UPDATE `users` SET ... WHERE `users`.`user_id` = 1 ;
4

1 に答える 1

0

Django モデルは複数の主キーをサポートしていません: https://docs.djangoproject.com/en/1.3/faq/models/#do-django-models-support-multiple-column-primary-keys

ただし、ドキュメントに記載されているように、unique_together など、ForeignKey フィールドで他のプロパティを使用して同じことを行うことができます。それがあなたを助けることを願っています。

于 2011-07-08T18:15:15.937 に答える