gpt4 book ai didi

django - 在 Django 中查找特定范围内的重叠日期

转载 作者:行者123 更新时间:2023-12-05 00:46:48 24 4
gpt4 key购买 nike

我在 Django 中查找重叠日期范围时遇到问题。我有两个模型,reunion,它有一个日期范围:

class reunion(models.Model):        
resource = models.ForeignKey(resource, on_delete=models.CASCADE)
start = models.DateTimeField()
end = models.DateTimeField()
title = models.CharField(max_length=100)

还有resource模型:

class resource (models.Model):
site = models.ForeignKey(site, on_delete=models.CASCADE)
name = models.CharField(max_length=60)
def isAvaible(self, endDate, initialDate):
try:
self.reunion_set.get(Q(start__lt=endDate) | Q(end__gt=initialDate))
return False
except:
return True

当我需要在特定的日期范围内重新团聚时,我需要找到一个不重叠的资源,所以我使用这种方法:

def getAvaibleAccount(initialDate, endDate):
avaibleResources = resource.objects.all()

for avaibleResource in avaibleResources:
if avaibleResource.isAvaible(initialDate,endDate):
return avaibleResource
return None

但我的代码显示日期范围:(12/30/2019 11:00 - 12/30/2019 12:00) 与 (12/31/2019 11:30 - 12/31/2019 12: 30) 好像只是比较时间而不是日期。我一直在寻找,但我没有任何运气。

我的错误在哪里?

我将日期作为字符串获取并使用 dateutil.parser.parse() 解析它们。

最佳答案

两个区间(s1, t1)(s2, t< sub>2)not 整体,给定 t1 < s2 ,或 t2 < s1。因此,这意味着两个资源重叠给定 t1 ≥ s2t2 ≥ s<子>1.

因此,这意味着您应该执行如下检查:

def isAvaible(self, endDate, initialDate):
return <b>not</b> self.reunion_set.filter(<b>end__gte=intialDate, start__lte=endDate</b>).exists()

请注意,您应该不要使用 .get(..) [Django-doc]在这里,因为当有 no 记录或有 多个 记录(两个或更多)时,这将引发错误。您在这里可以使用.exists() [Django-doc]找出是否存在这样的记录。

关于django - 在 Django 中查找特定范围内的重叠日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com