我想使用一组过滤器从我的数据库中检索一串行.

我想知道在Django 有条件的过滤是否适用.也就是说,"如果变量不是NONE,则过滤,否则不应用过滤".

大概是这样的:

user = User.objects.get(pk=1)
category = Category.objects.get(pk=1)
todays_items = Item.objects.filter(user=user, date=now()).conditional_filter(category=category))

我想做的是只有在类别不是无的情况下才应用类别过滤.

如果CATEGORY为NONE(意味着它没有在请求对象中给出),则根本不会应用此过滤.这将为我省go 一堆"如果--如果--否则"的情况.

有办法做到这一点吗?

推荐答案

您可以链接查询:

user = User.objects.get(pk=1)
category = Category.objects.get(pk=1)
qs = Item.objects.filter(user=user, date=now())
if category:
    qs = qs.filter(category=category)

由于查询集执行缓慢,只有在显示项目时才会出现DB命中.

Django相关问答推荐

查询在对象中使用django查询与一个包含句子

Django Admin中显示的DateField下面的小提示是什么?

__init__()获取了意外的关键字参数';id';

为什么 timezone.now 在作为默认值应用于 Django 中的 DateField 时显示future 日期

Django 模型 Select - 只允许管理界面上的特定转换

Django rest框架覆盖ViewSet中的page_size

使用 Django 和 South 重命名应用程序

获取结果集中返回的元素数的 django 模板标签是什么?

Django 模型中的隐藏字段

在 django 模板中遇到 user.is_authenticated 问题

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

如何验证对象是否存在于多线程中

Django - 无法为具有动态 upload_to 值的 ImageField 创建迁移

related_name 参数在 Django 模型中没有按预期工作?

如何在 Django 和 django-jsonfield 中将 JSONField 的默认值设置为空列表?

在 Django 中舍入小数点

django Datefield 到 Unix 时间戳

Celery - 在一台服务器上运行不同的工作人员

如何将 django csrf 令牌直接嵌入 HTML?

Django 模型方法 - create_or_update