Фильтр представления списка на основе внешнего ключа другой модели
У меня есть три модели, предметы, темы и учебные дни. Я хочу отобразить учебные дни в виде списка, но показать учебные дни с разными темами, связанными с одним и тем же предметом
Это структура моей модели
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)