gpt4 book ai didi

Django 唯一的一起约束与关系

转载 作者:行者123 更新时间:2023-12-02 02:48:55 25 4
gpt4 key购买 nike

我正在使用 Django 和 Django Rest Framework 编写 REST API。我目前正在编写模型。

我有一个学生模型,一个问题模型和一个答案模型。

class Question(models.Model):
question_text = models.CharField()


class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
answer_text = models.CharField()


class Student(models.Model):
name = models.CharField()

学生应该能够为每个问题选择一个且只能选择一个答案。所以我在考虑设计一个学生选择的答案模型——这样我就可以让学生通过关系来选择——就像这样:

class StudentPickedAnswer(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
answer = models.ForeignKey(Answer, on_delete=models.CASCADE)

我发现有一个unique_together class Meta 的约束。但在我看来,它不能指定关系。我需要这样的东西;

class Meta:
unique_together = ('student', 'answer__question')

我怎样才能让学生每个答案只能选择一个问题?还是选择具有关系的模型是糟糕的设计?

最佳答案

因为您提到学生需要为问题选择答案,所以我认为您需要为您的问题选项/选择建立一个模型。然后,您可以在(学生,问题)上使用 uniquetogether 对学生响应模型进行建模

class Question(models.Model):
question_text = models.CharField()
options = models.ManyToManyField(QuestionOption)

class QuestionOption(models.Model):
option_text = models.CharField(max_length=255)

class Student(models.Model):
name = models.CharField()

class StudentResponse(models.Model):
student = models.ForeignKey(Student)
question = models.ForeignKey(Question)
response_option = models.ForeignKey(QuestionOption)

class Meta:
unique_together = ("student", "question")

如果每个问题都需要有独特的选择,则另一种方法。这类似于 polls app tutorial在 Django 文档中。

class Question(models.Model):
question = models.CharField(...)

class QuestionOption(models.Model):
question = models.ForeignKey("Question",related_name="qs_options")
option = models.CharField(max_length=200)

class Meta:
# ensuring choices are not duplicated for a question.
unique_together = ("question", "option")

关于Django 唯一的一起约束与关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53030363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com