#python #django #django-models #django-views
#python #django #django-модели #django-просмотры
Вопрос:
Я пытаюсь сделать так, чтобы я мог показывать только краткие сведения с именем slug в качестве категории, однако это не работает.
На данный момент я могу использовать его, только показывая все краткие сведения, используя .objects.all() однако это не подходит для моего желаемого варианта использования.
Нужно ли мне также поле slug в разделе brief?
Models.py
class Category(models.Model):
name = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=50, unique=True)
class Meta:
verbose_name_plural = 'categories'
verbose_name = 'category'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('browse')
class Brief(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
brandname = models.CharField(max_length=28)
description = models.CharField(max_length=200)
date = models.DateTimeField(auto_now=True, blank=True)
category = models.ForeignKey(Category, on_delete=CASCADE)
def get_absolute_url(self):
return reverse('homepage')
Urls.py
path('browse/categories/<slug:catslug>/', views.postsinthecategory, name = 'catslug'
views.py
def postsinthecategory(request, catslug):
categories = Category.objects.all()
brief = Brief.objects.all()
if catslug:
category = get_object_or_404(Category, slug = catslug)
brief = Brief.objects.get(category=catslug)
template = 'users/categoryposts.html'
context = {'categories': categories, 'brief': brief, 'category': category}
return render(request, template,context)
Ответ №1:
Вы можете использовать __slug
для фильтрации по slug
полю соответствующей модели. Используйте filter
вместо get
, потому что вам нужен набор запросов, который может содержать более brief
. Я бы переименовал brief
в briefs
, на ваш взгляд, чтобы сделать это более понятным.
briefs = Brief.objects.filter(category__slug=catslug)
Или, поскольку вы выбрали категорию в предыдущей строке, вы могли бы сделать:
category = get_object_or_404(Category, slug = catslug)
briefs = Brief.objects.filter(category=category)
Комментарии:
1. Это должно быть
filter
неget
, потому что для каждой категории может быть несколько кратких описаний. Исправлено.