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是继承的类)
我得到了这个错误的“列表”对象,没有属性“过滤器”
答案 0 :(得分:2)
基本上,当您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))
答案 1 :(得分:0)
这里的订单被明确转换为列表,列表没有过滤器属性
orders=list(sorted(chain(m,r,g),key=lambda objects:objects.start))
您要查找的是QuerySet,应该在Model上查询。
如果订单是模型列表,则应执行
for order in orders:
orders = order.filter(
Q(name__icontains=mquery) |
Q(game__name__icontains=mquery) |
Q(teams__name__icontains=mquery)).distinct()