假设我想要一个这样的模型:
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 干杯!
最佳答案
您的答案非常接近。当您查找单个日期是否存在时,请直接使用日期对象:
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/