Django, динамическая фильтрация общих представлений

Я начинаю работать с Django и пытаюсь вывести все показы (экранизации), которые были у выбранного фильма. Вот код:

url

path('movie/<int:pk>/', MovieDetails.as_view(), name='movie'),

Модели

class Movie(models.Model):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=255, blank=True)

    def __str__(self):
        return f'{self.title}'

class Show(models.Model):
    show_date = models.DateField()
    start_time = models.TimeField()
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE, null=True, blank=True)
    city = models.ForeignKey(City, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return f'{self.show_date}'

Вид

class MovieDetails(DetailView):
    model = Movie
    context_object_name = 'movie'

    def get_queryset(self):
        self.movie = get_object_or_404(Movie, id=self.kwargs['pk']) #find movie by id from url
        shows_played = Show.objects.filter(movie=self.movie)
        print(shows_played) #prints out some shows
        return shows_played

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['shows_played'] = Show.objects.filter(movie=self.movie)

        return context

В shows_played распечатывается несколько сериалов, так что кажется, что все в порядке, но когда url: /movies/1 я получаю 404, No show found matching the query rendered in browser and Not Found: /movie/1/ выводится в консоль

Что я делаю неправильно? Спасибо

Я разобрался. Моя ошибка была в том, что я использовал DetailView вместо ListView (который имеет метод get_queryset) для "MovieDetails".

Вернуться на верх