django - 查询新的 Django/Postgres DateRangeField

标签 django postgresql

假设我想要一个这样的模型:

from django.db import models
from django.contrib.postgres.fields import DateRangeField

class QueryRange(models.Model):
    name = models.CharField('Name', max_length=50)
    rsv = DateRangeField()

然后在 shell 中我创建了一些像这样的对象:

obj1 = QueryRange.objects.create(name='John', rsv=('2016-06-01', '2016-06-10'))
obj2 = QueryRange.objects.create(name='Peter', rsv=('2016-07-05', '2016-07-10'))
obj3 = QueryRange.objects.create(name='Chris', rsv=('2016-07-12', '2016-07-15'))

我如何通过询问以下问题来查询数据库:请检查日期,即“2016-07-08”是否已被占用

这样的东西是行不通的:

from psycopg2.extras import DateRange

rng = DateRange('2016-07-08')
QueryRange.objects.filter(rsv__contains=rng)

我已经使用两个单独的 date 字段(from_dateuntil_date)实现了相同的场景并且效果很好(当然)。我很好奇如何使用 DateRangefield 使自己受益。

为所有 Djangonauts 干杯!

最佳答案

您的答案非常接近。当您查找单个日期是否存在时,请直接使用日期对象:

from datetime import date
QueryRange.objects.filter(rsv__contains=date.today())

如果您使用日期范围进行查询,您可能希望查看是否有任何重叠:

rng = DateRange('2016-07-08', '2016-07-20')
QueryRange.objects.filter(rsv__overlap=rng)

测试了这两个示例以确保它们有效。

关于django - 查询新的 Django/Postgres DateRangeField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075440/

相关文章:

django - django 表单的 ViewDoesNotExist/Import 错误

python - Django 的 objects.all() 杀死 python

sql - PostgreSQL 查询中每个月的最后三个月平均值

python - 注释值给出 None,需要 0

python - HTML 没有应用 CSS

python - Django model.DoesNotExist 异常以某种方式替换为 AttributeError

postgresql - 如何更改 PostgreSQL Studio 的不活动超时?

sql - 如何在 Postgresql 中创建条件插入函数?

Postgresql:检查字符串中字母是否重复

c# - SQL LIKE 语句或 C# foreach 检查?