Есть две простые модели:
models.py
class Author(models.Model):
name = models.CharField(max_length=255)
author_slug = models.SlugField(unique=True)
class Song(models.Model):
name = models.CharField(max_length=255)
song_slug = models.SlugField(unique=True)
song_author = models.ForeignKey(Author)
и два представления:
views.py
class SongListView(ListView):
model = Song
context_object_name = 'songs_list'
template_name = 'songs_list.html'
def get_queryset(self):
queryset = super(SongListView, self).get_queryset()
paginator = Paginator(queryset, 10)
page = self.request.GET.get('page')
try:
queryset = paginator.page(page)
except PageNotAnInteger:
queryset = paginator.page(1)
except EmptyPage:
queryset = paginator.page(paginator.num_pages)
return queryset
class AuthorSongListView(SongListView):
def get_queryset(self):
queryset = super(SongListView, self).get_queryset()
author = Author.objects.get(author_slug=self.kwargs.get('author_slug'))
paginator = Paginator(queryset.filter(song_author=author), 10)
page = self.request.GET.get('page')
try:
queryset = paginator.page(page)
except PageNotAnInteger:
queryset = paginator.page(1)
except EmptyPage:
queryset = paginator.page(paginator.num_pages)
return queryset
Первое представление выводит список абсолютно все песен, по 10шт на страницу. Второе выводит по 10 песен на страницу, но принадлежащих определенному исполнителю. Можно ли как-то улучшить второе представление, а то выходит, что я повторяюсь в написании пагинации?