Django: невозможно распаковать не повторяемый объект сообщений (TypeError) - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь отфильтровать элементы, присутствующие в модели «Сообщения», по одному из их атрибутов.

Это мое представление на основе классов:

class FilteredPostListView(ListView):
model = Posts
template_name = "blog/post-category.html"
context_object_name = "posts"
paginate_by = 6

#the actual fuction that should filter the element by their category attribute: 
def get_queryset(self):
    category = get_object_or_404(Posts, category=self.kwargs.get("category")) 
    return Posts.objects.filter(category)

Это связанный фрагмент в моем urls.py:

path('category/<category>/', FilteredPostListView.as_view(), name='category')

Когда я набираю URL localhost: 8000 / category / example /, где «example» - это значение атрибута «category», по которому я пытаюсь выполнить фильтрацию, я получить следующие ошибки:

Если несколько объектов сообщений имеют категорию атрибута со значением «пример»:

MultipleObjectsReturned at /category/example/
get() returned more than one Posts -- it returned 2!

Если только один объект сообщений имеет категорию атрибута со значением «пример»:

TypeError at /category/example/
cannot unpack non-iterable Posts object

Почему он возвращает не повторяющиеся объекты?

ОБНОВЛЕНИЕ:

если метод def get_queryset() изменен на более упрощенную версию со значением атрибут "категория" жестко запрограммирован, как этот:

    def get_queryset(self):
        return Posts.objects.filter(category="example")

Тогда код работает безупречно, и представление на основе класса возвращает повторяемые объекты, для которых для атрибута «категория» установлено значение «пример», и это может быть отображается в шаблоне с for codeblock.

Но я не могу жестко закодировать значение атрибута "category" каждый раз, когда я хочу фильтровать свои объекты "Сообщения" по атрибуту.

Итак, проблема заключается в более сложная версия метода:

    def get_queryset(self):
        category = self.kwargs.get("category")
        return Posts.objects.filter(category).order_by("-date_posted")

Это по какой-то причине возвращает не повторяемые объекты.

...