Как я могу постранично отобразить атрибуты модели?
У меня есть отдельная страница для каждой серии, но я хочу сделать пагинацию внутри этой страницы. Я хочу постранично отображать эпизоды, потому что некоторые серии имеют более 100 эпизодов, и это слишком много для одной страницы.
class SerieDetailedView(DetailView):
template_name = "tailwind/series_detail.html"
model = Serie
slug_url_kwarg = "serie_name"
slug_field = "name"
context_object_name = "project"
def get_object(self, queryset=None):
return Serie.objects.get(name=self.kwargs["serie_name"])
В данном случае, в качестве модели я выбрал следующее:
class Serie(models.Model):
name = models.CharField(max_length=150, unique=True)
finished = models.BooleanField(default=False)
episodes = ArrayField(base_field=models.CharField(max_length=100), default=list)
published_at = models.DateTimeField(auto_now_add=True)
У меня получается как раз пагинация всех серий, но дело в другом, я хочу пагинацию вещи, которая находится внутри серии.
Я пытался сделать это, но не получилось, потому что это одна страница:
class SerieDetailedView(DetailView):
template_name = "tailwind/series_detail.html"
model = Serie
slug_url_kwarg = "serie_name"
slug_field = "name"
context_object_name = "project"
paginate_by = 10
def get_object(self, queryset=None):
return Serie.objects.get(name=self.kwargs["serie_name"]).episodes.order_by('-published_at')
Я думаю, что вы не поняли концепцию базы данных relationnal. В вашем случае вы должны разделить данные на две отдельные таблицы :
class Serie(models.Model):
name = models.CharField(max_length=150, unique=True)
finished = models.BooleanField(default=False)
published_at = models.DateTimeField(auto_now_add=True)
class Episode(models.Model):
serie = models.ForeignKey(Serie, related_name="episodes", on_delete=models.CASCADE)
# you can add more data here, like name of the episode, duration, airing date, etc.
Затем, в DetailView, вы пишете :
from django.core.paginator import Paginator
class SerieDetailedView(DetailView):
template_name = "tailwind/series_detail.html"
model = Serie
slug_url_kwarg = "serie_name"
slug_field = "name"
context_object_name = "project"
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
episodes = self.objects.episodes.all()
data["episodes"] = Paginator(episodes, 10).page(1)
return data