【发布时间】:2021-08-13 06:29:03
【问题描述】:
我正在为我的学校项目创建一个评分查看应用程序,但我对如何建立每个模型的关系感到困惑。
我希望我的StudentGrade 模型上的subject 字段具有来自Student 模型的选项列表,但我只想显示/获取enrolled_subjects 的student instance
模型.py:
class Subjects(models.Model):
subject_name = models.CharField(...)
subject_code = ...
...
class Student(models.Model):
student = models.ForeignKey(setttings.AUTH_USER_MODEL,...)
enrolled_subjects = models.ManyToManyField(Subjects)
...
class StudentGrade(models.Model):
PERIOD_CHOICES = [
...
]
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE, limit_choices_to=Q(is_student=True))
period = models.CharField(choices=PERIOD_CHOICES, max_length=25)
subject = // i want this to be list of subjects that the student has enrolled
grade = models.DecimalField(max_digits=4, decimal_places=2)
在StudentGrade 模型上,我希望subject 字段基于student instance 的enrolled_subjects,我该怎么做?
【问题讨论】:
-
你必须在你的表单/序列化器中这样做
-
那么我应该如何处理
Student Model上的subject字段?我应该让它models.CharField()吗? @bdbd -
其实再看一遍,为什么不把subject放在
StudentGrade里面作为一个m2m,然后从Student里面去掉呢?因此,您可以通过StudentGrade访问学生的科目,这是有道理的,因为科目取决于年级/时期。另外,如果StudentGrade.user是学生,您可以使用Student作为FK 而不是settings.AUTH_USER_MODEL对吗? -
我建议使用 django 表单集的最简单方法。您可以使用表单集将多个模型字段组合到视图中的单个表单中。您可以阅读有关表单集的更多信息docs.djangoproject.com/en/3.2/topics/forms/modelforms