Django 复杂查询

Posted

技术标签:

【中文标题】Django 复杂查询【英文标题】:Django complex queries 【发布时间】:2011-06-08 16:56:51 【问题描述】:

我需要为检查日期范围的对象制作过滤器。现在我正在执行一个非常低效的循环来检查所有对象。我想将其简化为数据库调用。

逻辑是你有一个start 和一个end 日期对象。我需要检查开始或结束是否在约会范围内。

if (start >= appointment.start && start < appointment.end) || 
   (end > appointment.start && end <= appointment.end)

我可以在 SQL 中执行此操作,但我对更复杂查询的 Django 模型结构不太熟悉。

【问题讨论】:

【参考方案1】:

& 和 OR 运算符以及 range 字段查找类型需要 Q 对象

Q 对象:http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

范围:http://docs.djangoproject.com/en/dev/ref/models/querysets/#range

Entry.objects.filter(Q(start__range=(appointment.start, appointment.end)) | 
    Q(end__range=(appointment.start, appointment.end)))

如果 SQL BETWEEN 不是您正在寻找的,您始终可以使用 Q 对象的特定组合来准确重现您的条件:

Entry.objects.filter((Q(start__gte=appointment.start) & Q(start__lt=appointment.end)) | 
   (Q(end__gt=appointment.start) & Q(end__lte=appointment.end)))

【讨论】:

使用第一个例子,你在哪里使用start_dateend_date 对不起乔希!最初的示例直接来自文档,然后在以后的更新中我采用了您的特定变量:) 我将删除那些

以上是关于Django 复杂查询的主要内容,如果未能解决你的问题,请参考以下文章

Django:使用嵌套模型进行查询的复杂排序

如何将复杂的 django 查询构建为字符串

如何在 Django 1.9 中查询复杂的 JSONB 字段

具体复杂的 SQL 查询和 Django ORM?

Django:使用嵌套模型从许多关系查询中进行复杂排序和过滤

在 Django 中使用 Q() 动态构建复杂查询 [关闭]