1
假设我想有这样一个模型:查询新的Django的/的Postgres DateRangeField
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()
而且在外壳我创建这样一些对象:
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欢呼!
谢谢你的回答。我会尽快尝试并在此处发布结果。 –
这工作辉煌!但是当我搜索'QueryRange.objects.filter(rsv__contains = date(2016,6,10))'这是John的上限时,它什么也不给我。我知道默认情况下它被排除在外。我怎样才能包括它? (不是'DateRange',而是'date') –
你的意思是如果你的数据库中的日期范围为'$ d1'到'$ d2'并且你过滤了'$ d2',你没有得到结果,因为它有'[)'边界?现在唯一的解决方案是搜索'$ d2 - timedelta(days = 1)'。我最近用django打开了一张票,让其他边界像'[]'实现,所以这不会发生。 – Anonymous