Django:如何在__range中使用变量键过滤器

时间:2019-03-22 15:13:53

标签: python django filter range

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))

我的模型有两个不同的日期列。 (createdexpires)。用户可以在两个日期之间进行查询过滤,但可以选择是否要通过创建或到期进行过滤。

我可以使用if进行两行查询,但是我真的很想知道如何按照我的询问方式进行查询。

我该怎么做?由于__range之前的键是变量。我尝试使用(**{ filter: search_string }),但似乎与__range不兼容。

2 个答案:

答案 0 :(得分:3)

尝试

unFavorites

答案 1 :(得分:1)

您尝试的事情几乎是正确的!

查询不是函数(因此不是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)