фильтр объектов списка цепочек django - PullRequest
1 голос
/ 02 апреля 2019

Я хочу собрать все модели всех моих приложений и затем отфильтровать их, но у меня появляется следующая ошибка:

AttributeError at /search 'list' object has no attribute 'filter'
Request Method: GET Request
URL:    http://127.0.0.1:8000/search?category=1&submit=%D9%BE%DB%8C%D8%AF%D8%A7+%DA%A9%D9%86%21
Django Version: 2.1.7 Exception Type:   AttributeError Exception Value: 
'list' object has no attribute 'filter' Exception

views.py

from django.shortcuts import render
from app_adventure.models import *
from app_cultural.models import *
from app_children.models import *
from app_base.choices import Tour_type_choices, Destination_choices, Day_choices, Month_choices
from itertools import chain


# Create your views here.


# search


def search(request):
    adventure = AdventureTor.objects.all()
    cultural = CulturalTor.objects.all()
    children = ChildTor.objects.all()
    queryset_list = list(chain(adventure, cultural, children))

    # search by category
    if 'category' in request.GET:
        category = request.GET['category']
        if category:
            queryset_list = queryset_list.filter(category__icontains=category)  # mitonest iexact bashe

    context = {
        'Tour_type_choices': Tour_type_choices,
        'Destination_choices': Destination_choices,
        'Day_choices': Day_choices,
        'Month_choices': Month_choices,
        'search': queryset_list,
    }

    return render(request, 'search/search.html', context)

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вы не можете фильтровать цепочку, поскольку она больше не является запросом SQL.Вы можете попробовать отфильтровать эти 3 запроса по отдельности, затем использовать chain().Например:

def search(request):
    my_queries = [AdventureTor.objects.all(),
                  CulturalTor.objects.all(),
                  ChildTor.objects.all()]

    # search by category
    if 'category' in request.GET:
        category = request.GET['category']
        if category:
            my_queries = [query.filter(category__icontains=category) 
                          for query in my_queries]

    queryset_list = list(chain(**my_queries))
    context = {
    ...
0 голосов
/ 02 апреля 2019
>>> a=Comment.objects.all()
>>> b=Site.objects.all()        
>>> c=[a,b]
>>> c.filter()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'filter'
>>> a.filter()
[<Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, <Comment: Comment object>, '...(remaining elements truncated)...']
>>> b.filter()
[<Site: Site object>, <Site: Site object>, <Site: Site object>, <Site: Site object>]

Как говорит ошибка, отфильтруйте ваш набор запросов, прежде чем добавить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...