Django比较日期时间.time从时间字段类型E

2024-06-16 11:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着比较两个日期时间.time视图中某些python代码中的变量。在

p_目标时间\u开始是一个时间场

b_目标时间\u开始也是一个时间场

slot_start = p_obj.time_start
whereami = slot_start
...
for b_obj in mydata:
   while (b_obj.time_start > whereami):
   ...
...

当我运行视图时,我得到一个类型错误 无法比较日期时间.time内置函数或方法

看看django调试,我可以看到:

^{pr2}$

但是

slot_start  is  datetime.time(10, 0)

我相信我的问题是由于比较的评估方式。在

我尝试过各种排列,虽然我可以独立地得到两个变量来解析日期时间.time(就像slot_start一样)我看不到在while比较之前或期间让他们都这么做。有没有办法在比较之前强制进行评估?在

我认为这可能与第一个被评估的方法有关,然后是结果(a日期时间.time)与第二种方法(即方法)不可比。在比较之前,我是否缺少一些简单的语法来让这两个元素求值?在

奇怪地

if  (whereami < b_obj.time_start):

不会抛出任何错误,并且看起来工作正常(因为它执行预期的比较)。在

按要求添加更多信息:

class Booking(models.Model):
    ....
    practavail = models.ForeignKey(PractAvail, on_delete=models.PROTECT, blank=False)
    time_start = models.TimeField("Start Time", blank=False)
    time_finish = models.TimeField("Finish Time", blank=False)
    ....

class PractAvail(models.Model):
    ....
    time_start = models.TimeField("Start Time", blank=False)
    time_finish = models.TimeField("Finish Time", blank=False)
    ....

然后在我看来(跳过不必要的部分):

p_avails = PractAvail.objects.filter(date=inputdate).order_by('time_start')
for p_obj in p_avails:
    mydata['bookings'][p_obj.pk] =  p_obj.booking_set.all().order_by('time_start')

    for b_obj in mydata['bookings'][p_obj.pk]:

然后是上面的while循环。在

我还发现我的代码可以很好地与:

           if (b_obj.time_start > whereami):
               yesdoloop = True
           else:
               yesdoloop = False
           while yesdoloop:
              ...do stuff, including updating whereami...
              if (b_obj.time_start > whereami):
                    yesdoloop = True
              else:
                    yesdoloop = False

所以,与if相比,while与if的比较肯定有些不同之处(我想?!)在


Tags: 方法falseobjiftimemodels时间start