我扩展了我的帖子模型,现在我的post_list_by_category
函数显示了难看的列表。它显示了2个或更多不同的类别,其中仅应显示一个类别的帖子。
此应用程序使用2种类型的帖子模型,因此我需要以某种方式将它们放在一起,但也要按它们所属的类别进行过滤。有想法吗?
以前只能使用一种模型:
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})
新功能不适用于两种型号:
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
帖子:
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:
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)
... 其他字段不是必需的,但有差异
类别 ...
class Category(models.Model):
title = models.CharField(max_length=30, verbose_name="Title")
description = models.TextField(max_length=175, null=True, blank=True)
... 问候
答案 0 :(得分:0)
问题解决了:
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})