Django的。对链中的对象进行排序

时间:2019-08-13 10:00:19

标签: python django

我为对象管理器设置了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_2car_type_3组。

问题。如何从所有组中制作sorted by price个对象?

谢谢!

1 个答案:

答案 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合并到一个模型中。