我正在尝试在名为SearchForm(forms.Form)
的函数中抽象形式get_filters
的所有过滤逻辑。get_filters
返回一个Q对象,然后视图将其用于过滤实际的查询集。因此,get_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)
这很好。但是,我现在需要一个“ order by”字段。
我可以对
get_filters
函数中的Q对象执行此操作吗?或者我除了打破这种编程模式并在视图中访问form.cleaned_data
之外别无选择? 最佳答案
您可以使用视图代替get_filter来执行order_by吗?
from my_app.models import Project
filters = get_filters(form)
ps = Project.objects.order_by('name').filter(filters)
关于python - Django结合Q对象和order_by,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33763993/