2011-07-08 3 views
1

У меня есть две модели с составными ключами:связь между моделями с составными ключами

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) 
    . 
    . 
    . 

Первый вопрос, как я могу связать их, и запрос как в присоединиться.

Выберите * from ContestRegistration r присоедините ContestUser u к r.user_id = u.user_id и r.contest_id = u.contest_id, где r.contest_id = 3;

Во-вторых, как сохранить такой объект?

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

Это приводит к IntegrityError: (1062, "Дублировать запись '1-1' на ключ 'PRIMARY'")

Выполненная 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 ; 

ответ

0

Джанго не поддержка нескольких первичных ключей: https://docs.djangoproject.com/en/1.3/faq/models/#do-django-models-support-multiple-column-primary-keys

Однако, как описано в документации, вы можете использовать другие свойства в полях ForeignKey, например unique_together, для выполнения той же самой вещи. Надеюсь, что это поможет тебе.

Смежные вопросы