Django中如何按category=None查询全部书籍?适配Ruby逻辑
Django 实现类似 Ruby 中
Book.where(category = None) 的逻辑 在 Django 中,Book.objects.filter(category=None) 的作用是筛选出 category 字段值为 NULL 的书籍,这和 Ruby 中该写法返回全部书籍的逻辑完全不同。要实现“当传入 category=None 时返回全部书籍”的需求,有两种常用方式:
方法一:条件分支判断
直接通过判断参数是否为 None,决定返回全部查询集还是带筛选条件的查询集:
def get_books(category=None): if category is None: return Book.objects.all() return Book.objects.filter(category=category)
方法二:动态构建筛选参数
通过字典动态组装筛选条件,仅当参数不为 None 时才添加对应的筛选键值对:
def get_books(category=None): filter_params = {} if category is not None: filter_params["category"] = category return Book.objects.filter(**filter_params)
这两种方式都能实现你需要的逻辑:当 category 为 None 时返回所有书籍,否则筛选对应分类的书籍。
内容的提问来源于stack exchange,提问作者Smile1
相关产品推荐
相关产品推荐

