【发布时间】:2018-09-25 16:48:09
【问题描述】:
我正在处理一个 HTML 表单来过滤多个模型字段。
问题:
如何构建视图以便即使查询发生变化也返回单个查询集?
HTML
我的表单会将输入作为 kwargs 传递,因此请求将是这样的 -
/search/?order_by=newest
/search/?q=<string>&order_by=newest
/search/?q=<string>&order_by=newest&country=US
这些将过滤:
- 查询中的
string(q=...) -
order_by用于订购查询集 -
country按位置字段过滤结果
查看:
我试图在视图中添加一个查询,以消除复杂性并使视图尽可能简单。如何获取所有这些潜在变化并通过单个 get_queryset 方法?
这就是我现在所拥有的。
def get_queryset(self):
keywords = self.request.GET.get('q') or None
order_by = self.order_by_options.get(
self.request.GET.get('order_by')) or '-date_of_price'
if keywords:
query = SearchQuery(keywords)
vectors = SearchVector('name', weight='A')
qs = self.model.objects_for_search.annotate(search=vectors).filter(
search=query).order_by('sold', order_by, '-modified')
else:
qs = self.model.objects_for_search.order_by('sold', order_by, '-modified')
return qs[0:500]
上面代码的问题是我添加的属性越多,if statements 就越多。这段代码有 if statement 作为关键字,这对我来说并不优雅/pythonic。为国家/地区查询添加另一个if statement 肯定会很奇怪。
【问题讨论】:
标签: django django-views django-queryset