简体   繁体   English

Django-从两个模型中按类别过滤视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM