Django:如何使用__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不兼容。

尝试此

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)

最新更新