我的Django博客中有一个名为“ person”的类别函数。
在我的博客中,每个帖子(文章)都有1〜多个类别,当我单击其中的1个类别时,它将显示该类别下的所有帖子。
但是,对于某些类别,尤其是只有英文字母的类别(例如“史蒂夫”),请多次显示相同的帖子。
我认为使用 objects.filter 对其进行过滤存在一些问题,但不确定到底是什么问题。
您对此问题有解决方案吗?
以下是我的代码。
models.py
class Category(models.Model):
person = models.CharField(max_length=20)
description = models.TextField()
slug = models.SlugField()
def __str__(self):
return self.person
class Post(models.Model):
book_title = models.CharField(max_length=255)
author = models.CharField(max_length=255)
book_link = models.CharField(max_length=255)
source = models.TextField()
source_link = models.CharField(max_length=255)
created_on = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
categories = models.ManyToManyField("Category", related_name="posts")
views.py
def blog_category(request, category):
posts = Post.objects.filter(categories__person__contains=category).order_by(
"-created_on"
)
context = {"category": category, "posts": posts}
return render(request, "blog_category.html", context)
答案 0 :(得分:0)
如果同一getQueryString
所属的多个Post
匹配(因此包含查询),则有可能多次返回相同的Category
。您只能使用.distinct()
[Django-doc]来检索每个帖子一次:
def blog_category(request, category):
posts = Post.objects.filter(
categories__person__contains=category
).order_by('-created_on').distinct()
context = {'category': category, 'posts': posts}
return render(request, 'blog_category.html', context)