Я пытаюсь сделать образовательный сайт и создал систему категорий. Для каждой категории есть URL-адрес, и мне нужно изменить возвращаемый набор запросов в зависимости от того, на каком URL я нахожусь. Например, если я нахожусь на "localhost: 8000 / posts / category / 3", я хочу, чтобы мой набор запросов возвращался:
Post.objects.filter(category=3).order_by('-date_posted')
И так, в зависимости от URL.
Iне совсем знаю, с чего начать.
Представление на основе классов, которое возвращает набор запросов:
class CatPostListView(ListView):
model = Post
template_name = 'blog/science.html' #This is when you click a profile in a post, it takes you to his posts only
context_object_name = 'posts'
paginate_by = 15
def get_queryset(self):
return Post.objects.filter(category=2).order_by('-date_posted')
urls.py (содержит только необходимую часть):
urlpatterns = [
path('post/category/<int:pk>/', CatPostListView.as_view(), name='category')
]
И на всякий случай models.py:
class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField()
parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.SET_NULL)
class Meta:
# enforcing that there can not be two categories under a parent with same slug
# __str__ method elaborated later in post. use __unicode__ in place of
# __str__ if you are using python 2
unique_together = ('slug', 'parent',)
verbose_name_plural = "categories"
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.SET_NULL)
display = models.TextField(max_length=250)
date_posted = models.DateTimeField(default=timezone.now)#DON'T USE () HERE Just auto_now_ will show the date of the current day
author = models.ForeignKey(User, on_delete=models.CASCADE)#No () #This deletes the posts when the user is deleted
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
Если я воспользуюсь размещенным здесь представлением, оно не будет работать. Мне нужен метод, чтобы взять ПК из URL-адреса и поместить его в представления.