我的模型Book
有一个字段year_of_publishing
。用户输入年份,我想过滤Book
的集合,获取当年发布的所有书籍。
year = self.cleaned_data.get('year', SOME_DEFAULT_VALUE)
books = Book.objects.filter(year_of_publishing=year)
但是用户可能会将year
字段留空,我想要设置一些默认值,在.filter
函数中获取Django ORM将返回所有书籍,例如此过滤器根本不存在。我应该使用什么价值?我认为它应该是独立的类型,所以我可以将它用于Char-,Choice-和其他类型的字段。
答案 0 :(得分:3)
您可以使用字典构建查询集:
parameters = ['year', 'foo', 'bar']
query_dict = {}
for parameter in parameters;
if self.cleaned_data.get(parameter, None):
query_dict[parameter] = self.cleaned_data.get(parameter)
books = Book.objects.filter(**query_dict)
答案 1 :(得分:3)
您可以将空字典传递给.filter()
以返回所有结果,或过滤所需的字段/值:
filters = {}
year = request.GET.get('year')
if year:
filters['year'] = year
books = Book.objects.filter(**filters)