Джанго. Я хочу, чтобы он был перемещен внутри списка категорий
Я создал приложение доски объявлений, используя DJango. Эти бюллетени распределены по категориям.
Если вы щелкните по тексту на странице полного списка, перейдете на страницу детализации и выберете Предыдущий и Следующий, конечно, он будет перемещаться нормально.
Вот над чем я бьюсь уже несколько дней: когда я нажимаю на текст в определенном списке категорий и перехожу на страницу подробностей, я хочу, чтобы он перемещался в пределах этого списка категорий, если я выбираю предыдущий и следующий текст.
models.py
from django.db import models
from django.contrib.auth.models import User
import os
class Category(models.Model):
name = models.CharField(max_length=20, unique=True)
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True)
description = models.TextField(default='카테고리 설명')
def __str__(self):
return self.name
def get_absolute_url(self):
return f'/mytube/category/{self.slug}/'
class Post(models.Model):
title = models.CharField(max_length=100)
hook_text = models.CharField(max_length=100, blank=True)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL, default=5)
video_id = models.CharField(max_length=50, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, default='1')
def __str__(self):
return f'[{self.pk}] {self.title} :: {self.author}'
def get_absolute_url(self):
return f'/mytube/{self.pk}/'
def prev(self):
return self.get_previous_by_created_at()
def next(self):
return self.get_next_by_created_at()
views.py
from django.views.generic import ListView, DetailView
from .models import Post, Category
class PostList(ListView): #ListView 클래스를 PostList로 상속
model = Post
template_name = 'mytube/post_list.html'
ordering = ['-pk']
paginate_by = 10
def get_context_data(self, **kwargs):
context = super(PostList, self).get_context_data()
context['all_post_count'] = self.get_queryset().count()
context['categories'] = Category.objects.all()
context['paginate_by'] = PostList.paginate_by
return context
class PostListByCategory(PostList):
def get_queryset(self):
slug = self.kwargs['slug']
if slug == 'no_category':
category = None
else:
category = Category.objects.get(slug=slug)
return Post.objects.filter(category=category).order_by('-pk')
def get_context_data(self, **kwargs):
slug = self.kwargs['slug']
category = Category.objects.get(slug=slug)
context = super(PostListByCategory, self).get_context_data()
#context['cate_post_etc'] = Post.objects.filter(category__name=category).order_by('-pk')
slug = self.kwargs['slug']
if slug == 'no_category':
category = '미분류'
else:
category = Category.objects.get(slug=slug)
context['category'] = category
return context
class PostDetail(DetailView):
model = Post
template_name = 'mytube/post_detail.html'