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

2024-10-01 02:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使它,使我可以显示只有摘要与蛞蝓名称作为类别,但它不工作

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

我是否也需要在简要部分中使用slug字段

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')

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)

Tags: nameselftruegetreturnobjectsmodelsdef
1条回答
网友
1楼 · 发布于 2024-10-01 02:34:41

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

相关问题 更多 >