[英]Django - Filter view by category from two models
I extended my post models and now my post_list_by_category
function shows ugly lists.It shows 2 or more different categories where only posts from one category should be displayed. 我扩展了我的帖子模型,现在我的post_list_by_category
函数显示了难看的列表,它显示了2个或更多不同的类别,其中仅应显示一个类别的帖子。 This app uses 2 types of post models, so somehow I need to get them together but filtered by the categories they belong too. 此应用程序使用2种类型的帖子模型,因此我需要以某种方式将它们放在一起,但也要按它们所属的类别进行过滤。 Any idea? 任何想法?
Old working with one Model: 旧的使用一个模型:
def post_list_by_category(request, pk):
category = Category.objects.get(pk=pk)
list_posts = Post.objects.get_queryset().order_by('-pk')
paginator = Paginator(list_posts, 10) # Show 10 Posts per page
page = request.GET.get('page')
posts = paginator.get_page(page)
return render(request, 'MyProject/post_list_by_category.html', {'posts': posts, 'category': category})
New not working with two models: 新功能不适用于两个模型:
def post_list_by_category(request, pk):
category = Category.objects.get(pk=pk)
list_posts = list(chain(Post.objects.get_queryset().order_by('-pk'), Post_Extra.objects.get_queryset().order_by('-pk')))
paginator = Paginator(list_posts, 10) # Show 10 Posts per page
page = request.GET.get('page')
posts = paginator.get_page(page)
return render(request, 'MyProject/post_list_by_category.html', {'posts': posts, 'category': category})
models.py models.py
Post: 帖子:
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(verbose_name="Post Title", max_length=25)
content = models.TextField(verbose_name="Post Content", max_length=5000)
category = models.ForeignKey(Category, verbose_name="Category", on_delete=models.CASCADE, null=True)
.... ....
Post_Extra: Post_Extra:
class PostExtra(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(verbose_name="Post Title", max_length=25)
content = models.TextField(verbose_name="Post Content", max_length=10000)
category = models.ForeignKey(Category, verbose_name="Category", on_delete=models.CASCADE, null=True)
.... other fields are not necessary but they have differences ....其他字段不是必需的,但有区别
Category ... 类别...
class Category(models.Model):
title = models.CharField(max_length=30, verbose_name="Title")
description = models.TextField(max_length=175, null=True, blank=True)
... Kind regards ... 亲切的问候
That solved the issue: 那解决了问题:
def post_list_by_category(request, pk):
category = Category.objects.get(pk=pk)
list_posts = list(chain(Post.objects.filter(category_id=pk).order_by('-pk'), PostExtra.objects.filter(category_id=pk).order_by('-pk')))
paginator = Paginator(list_posts, 10) # Show 10 Posts per page
page = request.GET.get('page')
posts = paginator.get_page(page)
return render(request, 'MyProject/post_list_by_category.html', {'posts': posts, 'category': category})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.