【问题标题】:django database model relationshipsdjango 数据库模型关系
【发布时间】:2021-08-12 11:08:59
【问题描述】:

我需要在我的网络应用中处理诸如成绩查看之类的事情,例如,我的模型如下所示:

class Subjects(models.Model):
   subject = models.CharField(max_length= 255)

class Student(models.Model):
    student = models.Foreignkey(Student,related_name="student", on_delete=models.CASCADE)
    enrolled_subjects = models.ManyToManyField(Subjects)


class StudentGrade(models.Model):
     student = models.Foreignkey(Student,related_name="student", on_delete=models.CASCADE)
     subject = models.ForeignKey(?)
     grade = ...
     period = models.ForeignKey(SchoolPeriod)

    

如何访问Student Grades 模型中Student 对象的enrolled_subjects?

我应该做类似的事情吗:(我不确定我是否可以在 models.py 中做类似的事情)

class StudentGrade(models.Model):

    ENROLLED_SUBJECTS_CHOICES = Student.objects.filter(//some filter here)

     student = models.Foreignkey(Student,related_name="student", on_delete=models.CASCADE)
     subject = models.ChoiceField(choices= ENROLLED_SUBJECTS_CHOICES, default= None,)
     grade = ...
     period = models.ForeignKey(SchoolPeriod)

【问题讨论】:

  • 我建议StudenGrade 是多对多字段的“直通”模型。如果您将 grade 设置为可为空的字段,那么您最初可以将其设置为 null,直到该科目被评分。
  • 对不起,我没听懂,什么意思? @WillemVanOnsem

标签: django model


【解决方案1】:

只需从实例中访问ManyToMany 字段,然后您就可以对其应用查询集操作。

例如:

student_subjects = StudentGrade.objects.get(student_id=1).student.enrolled_subjects.all()

您也可以使用filter或exclude进行任何其他操作,您主要可以通过enrolled_subjects访问经理。

关于ManyToMany字段here的更多示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多