Kevin Herrmann
Kevin Herrmann

Reputation: 11

Django | Queryset ManyToMany Relation through Instance

I would like to display the different dates for each course. A course can also have several dates. Unfortunately I can't find a solution.

Models:

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")

View:

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)

Thanks for help!!!

Upvotes: 1

Views: 62

Answers (1)

Ed Kohler
Ed Kohler

Reputation: 544

Your courses queryset will already have access to your course dates through the foreign key so you don't need to run a second dates queryset in the view to access them.

When you loop through the courses, you'll then need to run a second loop through the dates of those courses within your template. Here's an example of that: Display foreign key value in django template

Upvotes: 1

Related Questions