Django-ORM过滤器默认值,返回所有对象

2024-05-29 07:59:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型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和其他类型的字段。在


Tags: of用户模型self类型datagetsome
2条回答

您只需使用字典构建查询集:

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)

您可以将空字典传递给.filter()以返回所有结果,或筛选所需的字段/值:

filters = {}

year = request.GET.get('year')
if year:
    filters['year'] = year

books = Book.objects.filter(**filters)

相关问题 更多 >

    热门问题