Django - Фильтр просмотра по категориям из двух моделей - PullRequest
0 голосов
/ 28 января 2019

Я расширил свои модели постов, и теперь моя функция 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)

... С уважением

1 Ответ

0 голосов
/ 28 января 2019

Это решило проблему:

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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...