date_one = form.cleaned_data.get('date_one')
date_two = form.cleaned_data.get('date_two')
date_type = form.cleaned_data.get('date_type')
search = MyClass.objects.filter(date_type__range(date_one, date_two))
我的模型有两个不同的日期列。(created
和expires
)。用户可以在两个日期之间进行查询过滤,但是他可以选择是否要通过创建或到期过滤。
我可以使用if
进行两条查询行,但我真的很想知道如何按照我的要求进行操作。
我该怎么做?由于__range
之前的密钥是一个变量。我尝试使用(**{ filter: search_string })
,但似乎与__range
不兼容。
尝试此
filter_dict = {"{}__range".format(date_type): [date_one, date_two]}
search = MyClass.objects.filter(**filter_dict)
您尝试的东西几乎是正确的!
查找不是函数(所以它不是foo__range(start, end)
),而是关键字参数:foo__range=(start, end)
所以您将拥有:
date_one = form.cleaned_data.get('date_one')
date_two = form.cleaned_data.get('date_two')
date_type = form.cleaned_data.get('date_type')
query_kwargs = {
"{}__range".format(date_type): (date_one, date_two)
}
search = MyClass.objects.filter(**query_kwargs)