Python Django通过组合Q对象和顺序_

Python Django通过组合Q对象和顺序_,python,django,django-q,Python,Django,Django Q,我试图在一个名为get\u filters的函数中抽象表单SearchForm(forms.form)的所有过滤逻辑 get\u filters返回一个Q对象,然后视图使用该对象过滤实际查询集。因此,get\u filters不也不应该了解查询集:它的工作只是返回一个可以传递给.filter() views.py: def my_view(request): form = SearchForm(request.GET) if form.is_valid(): f

我试图在一个名为
get\u filters
的函数中抽象表单
SearchForm(forms.form)
的所有过滤逻辑

get\u filters
返回一个Q对象,然后视图使用该对象过滤实际查询集。因此,
get\u filters
也不应该了解查询集:它的工作只是返回一个可以传递给
.filter()

views.py:

def my_view(request):
    form = SearchForm(request.GET)

    if form.is_valid():
        filters = form.get_filters()
        Model.objects.filter(filters)
forms.py:

class SearchForm(forms.Form):
    """
    Fields...
    """
    def get_filters(self):
        """
        filtering logic
        """
        return Q(some_filters)
这个很好用。但是,我现在需要一个“orderby”字段


我可以用
get\u filters
函数中的Q对象实现这一点吗?或者我除了打破这种编程模式并访问
表单之外别无选择。在视图中清理数据

而不是让过滤器执行命令,您能让视图执行吗

from my_app.models import Project
filters = get_filters(form)
ps = Project.objects.order_by('name').filter(filters)

问题真的是应该这样做吗?您已经标记了方法get filters,因此添加排序只会使该目标变得混乱