首页 > 解决方案 > “列表”对象没有属性“过滤器”

问题描述

def g_view(request):
    header_category = Category.objects.all()
    m = Type1.objects.all()
    r=Type2.objects.all()
    g=Type3.objects.all()
    from itertools import chain
    orders=list(sorted(chain(m,r,g),key=lambda objects:objects.start))

    mquery = request.GET.get('m')
    if mquery:
        orders = orders.filter(
            Q(name__icontains=mquery) |
            Q(game__name__icontains=mquery) |
            Q(teams__name__icontains=mquery)).distinct()

(类型是抽象的,type1 type2 type3 是继承类)

我收到此错误“列表”对象没有属性“过滤器”

标签: djangodjango-modelsdjango-views

解决方案


基本上,当您使用chain多个查询集时,您会失去查询集的能力。链接后,它们成为迭代器的一部分。您可以通过迭代或list显式调用来访问迭代器的值。您需要在链接查询集之前执行查询。

query = Q(name__icontains=mquery) |
        Q(game__name__icontains=mquery) |
        Q(teams__name__icontains=mquery)

m = Type1.objects.filter(query).distinct()
r = Type2.objects.filter(query).distinct()
g = Type3.objects.filter(query).distinct()


orders=list(sorted(chain(m,r,g),key=lambda objects:objects.start))

推荐阅读