假设我想拥有这样的模型:
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_date
和until_date
)实现相同的方案,并且效果很好(当然)。我很好奇我如何使用DateRangefield
。
欢呼所有Djangonauts!
答案 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)
测试了两个示例以确保它们正常工作。