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