有条件的order_by语句,Django

Ben*_*Ben 6 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())
Run Code Online (Sandbox Code Playgroud)

这将返回回溯:

   Invalid order_by arguments: ["'bedrooms','bathrooms'"] 
Run Code Online (Sandbox Code Playgroud)

小智 23

参见Django Book:第5章模型:

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

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

order_by('bedrooms', 'bathrooms')
Run Code Online (Sandbox Code Playgroud)

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

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

posts = Post.objects.filter(**keyword_args).order_by(*sorts())
Run Code Online (Sandbox Code Playgroud)

快乐的编码.