django比较来自时间字段的datetime.time - 类型错误

时间:2016-02-29 21:01:40

标签: python django python-datetime

我试图在View中的一些python代码中比较两个datetime.time变量。

p_obj.time_start是时间字段

b_obj.time_start也是时间字段

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

当我运行视图时,我得到一个类型错误 不能将datetime.time与builtin_function_or_method

进行比较

看看django调试我可以看到:

whereami    is <built-in method time of datetime.datetime object at 0x7fdb1136ee40>

slot_start  is  datetime.time(10, 0)

我认为我的问题是由于比较评估的方式。

我已经尝试了各种排列,虽然我可以独立地获取两个变量以解析为datetime.time(就像slot_start那样)但我无法让他们在比较之前或期间同时进行。有没有办法在比较之前强制进行评估?

我想到这可能与被评估的第一个方法有关,然后结果(datetime.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 if compare(我认为?!)

0 个答案:

没有答案