Ant*_*dak 3 python django django-models django-orm
我有一个模型Book,它有一个字段year_of_publishing。用户输入年份,我想过滤Book's set 以获取该年出版的所有书籍。
year = self.cleaned_data.get('year', SOME_DEFAULT_VALUE)
books = Book.objects.filter(year_of_publishing=year)
Run Code Online (Sandbox Code Playgroud)
然而,用户可能会将year字段留空,我想设置一些默认值,在.filter函数中获取哪个Django ORM 将返回所有书籍,就像这个过滤器根本不存在。我应该使用什么值?我想它应该是类型无关的,所以我可以将它用于 Char-、Choice- 和其他类型的字段。
您可以使用字典构建查询集:
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)
Run Code Online (Sandbox Code Playgroud)
您可以传递一个空字典来.filter()返回所有结果,或者过滤您想要的字段/值:
filters = {}
year = request.GET.get('year')
if year:
filters['year'] = year
books = Book.objects.filter(**filters)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |