【发布时间】:2014-03-17 23:43:46
【问题描述】:
首先,我在发布之前做了功课并环顾四周!我的问题似乎是一个非常基本的问题,以前必须讨论过。
我现在正在将 Django-filter 视为一种潜在的解决方案,但想了解这是否是正确的方法以及是否有其他解决方案。
我有一个包含 10 个模型的 Django 应用程序,每个模型都有几个字段。大多数字段是ChoiceField,用户使用带有默认select 小部件的表单填充。每个模型都有一个单独的表格。
我想为用户用于搜索数据库的每个模型(在单独的视图中)创建一个单独的表单。搜索表单将仅包含下拉框(select 小部件),其选项与用于填充数据库的表单相同,但添加了“any”选项。
我知道如何使用.object.filter(),但是“任何”选项对应于不包括过滤器中的特定字段,我不确定如何根据用户的选择将模型字段添加到过滤器
我曾短暂地将 Haystack 视为一个选项,但它似乎是为全文搜索而不是我所追求的“模型文件搜索”而设计的。
示例模型(简化):
class Property():
TYPE_CHOICES = (‘apartment’, ‘house’, ‘flat’)
type = charfield(choices=TYPE_CHOICES)
LOC_CHOICES = (‘Brussels’, ‘London’, ‘Dublin’, ‘Paris’)
location = charfield(choices=LOC_CHOICES)
price = PostivieInteger()
用户只能选择“类型”,只能选择“位置”或两者都选择(不选择等于 ANY)在这种情况下,我最终会得到 3 个不同的过滤器:
Property.objects.filter(type=’apartment’)
Property.objects.filter(location=’Dublin’)
Property.objects.filter(type=’apartment’, location=’Dublin’)
主要问题:django-filter 最佳选择?
Question 1: what’s the best option of accomplishing this overall?
Question 2: how do I add model fields to the filter based on user’s form selection?
Question 3: how do I do the filter based on user selection? (I know how to use .filter(price_lt=).exclude(price_gt=) but again how do I do it dynamically based on selection as “ANY” would mean this is not included in the query)
【问题讨论】: