Модель Джанго с 3-мя много-много полей - PullRequest
1 голос
/ 08 июля 2011

У меня есть эти модели

class User(models.Model):
    user_name = models.CharField()
    ph_number = models.CharField()

class ExamPaper(models.Model):
    paper_name = models.CharField()
    paper_subject = models.CharField()

class Questions(models.Model):
    paper = models.ManyToManyField(ExamPaper, related_name='question_set')
    question_num = models.IntegerField()
    question_text = models.TextField()

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

Я хочу, чтобы в таблице mysql пользователь, бумага и вопрос определяли первичный ключ, взятый вместе, и еще два поля 'mark' и 'result'. Я не могу понять, как это сделать в моделях Django. Будет ли это работать:

class Result(models.Model):
     user = models.ManyToManyField(User)
     paper = models.ManyToManyField(ExamPaper)
     question = models.ManyToManyField(Question)
     marks = models.IntegerField()
     result = models.CharField()

Пожалуйста, кто-нибудь может кто-нибудь объяснить?

Ответы [ 2 ]

6 голосов
/ 08 июля 2011

Вы должны использовать отношения «один ко многим» ( ForeignKey ) вместо «многие ко многим»:

class Result(models.Model):
     user = models.ForeignKey(User)
     paper = models.ForeignKey(ExamPaper)
     question = models.ForeignKey(Question)
     marks = models.IntegerField()
     result = models.CharField()

     class Meta:
         unique_together = (("user", "paper", "question"), )

Если вопрос может появиться только на одном экзаменационном листе, тогда вопрос.объект также должен быть ForeignKey, и вы можете удалить поле paper из Result.

0 голосов
/ 08 июля 2011

Для начала вам, вероятно, понадобится опция unique_together для класса _meta.См .: https://docs.djangoproject.com/en/1.3/ref/models/options/#unique-together

РЕДАКТИРОВАТЬ: похоже, Django требует по крайней мере одно поле первичного ключа.https://docs.djangoproject.com/en/1.3/topics/db/models/#automatic-primary-key-fields

...