我试图在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(我认为?!)