Фильтр представления списка на основе внешнего ключа другой модели

У меня есть три модели, предметы, темы и учебные дни. Я хочу отобразить учебные дни в виде списка, но показать учебные дни с разными темами, связанными с одним и тем же предметом

Это структура моей модели

class Subject(models.Model):
    name = models.CharField(max_length=100, null=False)

 
class Topic(models.Model):
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
    name = models.CharField(max_length=100, null=False)

 
class StudyDay(models.Model):
    student = models.ForeignKey(User, on_delete=models.CASCADE)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    ...
    

Я попробовал это в одном из представлений, и оно фильтрует правильно, но оно удаляет данные, которые ранее отображались, связанные с днем исследования, поэтому оно не работает правильно.

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['study'] = context['study'].filter(student=self.request.user)
        context['study'] = Topic.objects.filter(subject=3) # This is the line where I try to filter
        return context

Вопрос в том, есть ли способ отфильтровать объекты в модели StudyDay на основе того, к какому предмету относится тема учебного дня?

Я думаю, что вы захотите использовать __ (двойное подчеркивание) для доступа к атрибутам ваших ForeignKeys в filter. Смотрите документацию Django о фильтрации.

Так что в этом конкретном случае вы можете получить учебные дни по предмету, если сделаете:

context['study'] = StudyDay.objects.filter(student=self.request.user, topic__subject__pk=3)
Вернуться на верх