django - 一个混合使用 filter() 和 Q 对象的 Django ORM 查询

标签 django orm django-q

我希望创建一个稍微复杂的查询,使用原始 SQL 编写起来相当容易。这是原始查询的示例:

SELECT my,fields FROM sales WHERE is_paid = False OR status = 'toship' AND otherfield = 'FOO' AND anotherfield = 'BAR'



这很简单,它生成 is_paid = False 的所有结果,然后为我的 AND 匹配生成第二个结果集。

现在我知道 Q 对象,我知道过滤,但我似乎无法思考如何在 Django ORM 中干净地实现这一点。

有小费吗?

谢谢

最佳答案

您可以继续以某种动态的方式构建 Q 对象。

例子:

query1 = Q(is_paid=False)

query2 = Q()

if status:
    query2 = Q(status=status)

if otherfield:
    query2 = query2 & Q(otherfield=otherfield)

if anotherfield:
    query2 = query2 & Q(anotherfield=anotherfield)

query = query1 | query2

result = model.objects.filter(query)

关于django - 一个混合使用 filter() 和 Q 对象的 Django ORM 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166074/

相关文章:

django保存模型ForeignKey关系

Python/Django 过滤组中具有最大值的行

PHP/Laravel : Retrieve new info of Model after save()

php - 学说 2 @Version 不起作用

javascript - Django 和 jQuery 的困难(为什么 $ 在管理应用程序中未定义?)

python - 请求设置 DEFAULT_INDEX_TABLESPACE,但未配置设置

python - Django 中的 SlugField 和覆盖保存

python - 带有Q和多个类别的django查询

python - Django Q 过滤器未按预期工作

python - Django q 更新一个已经安排好的任务