我有一个模型,其中包含日期范围,我想要过滤数据的基础上的范围日期,即我要的数据谁的日期范围是从今天的日期90天。
class MyModel(models.Model):
name = models.CharField(max_length=255)
start_end_date = ranges.DateTimeRangeField(validators=
[validate_range_date_time])因此,当我们选择页面上的开始日期时,结束日期将显示相同的日期,但我不能在今天之前连接过滤器+ timedelta(days=90),这是一个单一日期,字段是日期范围,所以我如何过滤90天后的日期范围数据。
模型将start_end_date存储为
'start_end_date': DateTimeTZRange(datetime.datetime(2022, 11, 29, 9, 15), datetime.datetime(2022, 11, 29, 10, 0),
Mymodel.objects.filter(start_end_date__contains=timezone.now() + timezone.timedelta(days=90))
timezone.now() + timezone.timedelta(days=90) = datetime.datetime(2022, 11, 29, 22, 52, 7, 759648)查询提供的是空集。
发布于 2022-09-01 06:49:48
我自己也没有使用过这个字段,但是在我从文献资料中看到的基础上,应该是这样的:
from psycopg2.extras import DateTimeTZRange
Mymodel.objects.filter(
start_end_date__contained_by=DateTimeTZRange(
timezone.now(),
timezone.now() + timezone.timedelta(days=90)
)
)要检查从现在起90天内是否有任何start_end_date字段,您还应该传递一个日期时间范围。
编辑:
from psycopg2.extras import DateTimeTZRange
Mymodel.objects.filter(
start_end_date__contained_by=DateTimeTZRange(
timezone.now(),
timezone.now() + timezone.timedelta(days=90),
start_end_date__lower_inc=False
)
)发布于 2022-09-01 07:36:55
我想你可以更容易地设计这个模型。
class MyModel(models.Model):
name = models.CharField(max_length=255)
start_date = models.DateTimeField()
end_date = models.DateTimeField()然后,您可以找到如下所示的对象。
target_time = timezone.now() + timezone.timedelta(days=90)
MyModel.objects.filter(start_date__lte = target_time).filter(end_date__gte = target_time)发布于 2022-09-01 08:01:50
由于它是一个DateTimeRangeField,我认为您的结果可以通过使用startswith和endswith来实现,就像这样:
max_date = timezone.now() + timezone.timedelta(days=90)
MyModel.objects.filter(start_end_date__startswith__gte=timezone.now(), start_end_date__endswith__lte=max_date)希望能帮上忙!
https://stackoverflow.com/questions/73564800
复制相似问题