我设置了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
来自所有组?
谢谢!
最佳答案
您可以使用 sorted(..)
对列表中的项目进行排序:
from operator import <b>attrgetter</b>
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 = <b>sorted(</b>chain(objs1, objs2, objs3)<b>, key=attrgetter('price'))</b>
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>i</i>
合并起来。合并为单一模型。
关于python - Django 。对链中的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475421/