Django从url slug获取对象不起作用



我正在尝试制作它,以便只显示以slug名称为类别的简报,但它不起作用。

目前,我只能通过使用.objects.all((显示所有简报来使用它,但这不适合我想要的用例。

我是否也需要在简短部分中添加段塞字段?

型号.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')

URL.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)

您可以使用__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)

最新更新