Django在视图中链接多个查询

时间:2018-03-06 02:51:35

标签: python django django-models django-queryset django-orm

我有三种模式:

  • 课程
  • 作业
  • 期限

course有一个ManyToManyField,用于访问名为student的字段中的Django默认用户,以及term

的ForeignKey

assignment的ForeignKey为course

以下是相关模型:

class Assignment(models.Model):
    title = models.CharField(max_length=128, unique=True)
    points = models.IntegerField(default=0, blank=True)
    description = models.TextField(blank=True)
    date_due = models.DateField(blank=True)
    time_due = models.TimeField(blank=True)
    course = models.ForeignKey(Course)

class Course(models.Model):
    subject = models.CharField(max_length=3)
    number = models.CharField(max_length=3)
    section = models.CharField(max_length=3)
    professor = models.ForeignKey("auth.User", limit_choices_to={'groups__name': "Faculty"}, related_name="faculty_profile")
    term = models.ForeignKey(Term)
    students = models.ManyToManyField("auth.User", limit_choices_to={'groups__name': "Student"}, related_name="student_profile")

当用户登录页面时,我想向他们展示类似bootstrap collapse card的内容,我可以在其中显示每个学期以及学生注册的相应课程。

我可以访问学生注册的所有课程,我只是难以找出查询来选择条款。我尝试过使用“select_related”'没有运气,虽然我可能错误地使用它。到目前为止,我已经course_list = Course.objects.filter(students = request.user).select_related('term')了。有没有办法获得所有条款及其相应的课程,以便我可以按照我喜欢的方式展示它们?如果没有,我应该以不同的方式为我的数据库建模吗?

2 个答案:

答案 0 :(得分:0)

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values

您可以在此处使用valuesvalues_list来获取相关模型Term的字段。

例如扩展您当前的请求:

要检索所有Term s'查询集中name的{​​{1}}和duration

Course

我不确定您的Course.objects.filter(students = request.user).values('term__name', 'term__duration')模型的字段是什么,但您会将Termname替换为您想要获得的字段。

答案 1 :(得分:0)

我认为它可以帮助你

terms = Terms.objects.filter(....) # terms
cources0 = terms[0].course_set.all() # courses for terms[0]

cources0 = terms[0].course_set.filter(students=request.user) # courses for terms[0] for user