我为对象管理器设置了sorting related
。我有views.py
def Objects(request):
Objects_1 = car_type_1.objects.filter(manager_id='1', is_published=True)
Objects_2 = car_type_2.objects.filter(manager_id='1', is_published=True)
Objects_3 = car_type_3.objects.filter(manager_id='1', is_published=True)
queryset_list = list(chain(Objects_1, Objects_2, Objects_3))
paginator = Paginator(queryset_list, 6)
page = request.GET.get('page')
paged_listings = paginator.get_page(page)
context = {'listings': paged_listings}
return render(request, 'template.html', context)
结果,我得到一个包含对象的页面。对所有对象负责manager id 1
。
所有内容在页面上均正确排序。显示manager id 1
个对象。但是,它们被一一显示。
首先来自car_type_1
组,然后是car_type_2
和car_type_3
组。
问题。如何从所有组中制作sorted by price
个对象?
谢谢!
答案 0 :(得分:0)
您可以使用sorted(..)
对列表中的项目进行排序:
from operator import attrgetter
def objects(request):
objs1 = car_type_1.objects.filter(manager_id='1', is_published=True)
objs2 = car_type_2.objects.filter(manager_id='1', is_published=True)
objs3 = car_type_3.objects.filter(manager_id='1', is_published=True)
items = sorted(chain(objs1, objs2, objs3), key=attrgetter('price'))
paginator = Paginator(items, 6)
page = request.GET.get('page')
paged_listings = paginator.get_page(page)
context = {'listings': paged_listings}
return render(request, 'template.html', context)
但是如果您需要对大量数据进行排序,则上述方法效率不高,因为这将导致将所有对象都提取到内存中并进行排序。通常,通常对数据库进行优化以对有限的结果集进行排序。
最好重新考虑您的设计,并将三个car_type_i
合并到一个模型中。