首页 > 解决方案 > 姜戈 | 通过实例查询集多对多关系

问题描述

我想显示每门课程的不同日期。一个课程也可以有多个日期。不幸的是,我找不到解决方案。

楷模:

class Course(models.Model):
    course_number = models.CharField(max_length=24, blank=True)
    course_location = models.ForeignKey(Course_location, on_delete=models.CASCADE)
    course_dates = models.ManyToManyField('Course_dates', through="Course_Course_dates")

    def __str__(self):
        return self.course_number

class Course_Course_dates(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    course_dates = models.ForeignKey(Course_dates, on_delete=models.CASCADE)

    def __str__(self):
        return self.id

class Course_dates(models.Model):
    date = models.DateField()
    start = models.TimeField()
    end = models.TimeField()
    trainer = models.ManyToManyField('Trainer', through="Course_dates_trainer")

    def __str__(self):
        return self.date.strftime("%d.%m.%Y")

看法:

def course_list(request):
    courses = Course.objects.all()
    course_list = []

    for course in courses:
        course_location = course.course_location.description
        dates = course.course_dates.all()
        
        course_list.append({'course': course, 'course_location': course_location, 'dates': dates,})
    
    context = { 'course_list': course_list, }
    return render(request, 'kursverwaltung_tenant/course.html', context)

感谢帮助!!!

标签: django

解决方案


您的课程查询集已经可以通过外键访问您的课程日期,因此您无需在视图中运行第二个日期查询集即可访问它们。

当您循环浏览课程时,您需要在模板中对这些课程的日期进行第二次循环。这是一个例子: 在 django 模板中显示外键值


推荐阅读