查询新的Django / Postgres DateRangeField

时间:2016-06-28 11:49:32

标签: 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!

1 个答案:

答案 0 :(得分:2)

你的回答非常接近。当您查找单个日期时,请直接使用日期对象:

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)

测试了两个示例以确保它们正常工作。