有条件的order_by语句,Django

时间:2011-03-24 17:47:38

标签: django django-models

我想要合并一个允许多个排序变量的排序功能。

我试图传递.order_by()函数,但是当我尝试包含多个字段时它仍然失败。我该怎么做?

if request.GET.get('size_sort')=='1':
        def sorts():
            sort='\'bedrooms\',\'bathrooms\''
            return sort
        posts=Post.objects.filter(**keyword_args).order_by(sorts())

这将返回回溯:

   Invalid order_by arguments: ["'bedrooms','bathrooms'"] 

1 个答案:

答案 0 :(得分:21)

请参阅Django Book: Chapter 5 Models

  
    

要按多个字段排序(第二个字段用于在第一个字段相同的情况下消除排序歧义),请使用多个参数:

  

也就是说,正确的调用是:

order_by('bedrooms', 'bathrooms')

在上下文中,与原始问题一致:

def sorts():
    sort = ['bedrooms', 'bathrooms']
    return sort

posts = Post.objects.filter(**keyword_args).order_by(*sorts())

快乐的编码。