Python Django查询值错误:小时必须为0..23

Python Django查询值错误:小时必须为0..23,python,django,Python,Django,我正在通过Django querysets进行查询,它返回“ValueError:hour必须在0..23中”筛选日期: 在models.py中: class handoff_model(models.Model): batch = models.ForeignKey(batch_def_model, on_delete=models.CASCADE) date = models.DateField(blank=True, null=True) class batch_def_

我正在通过Django querysets进行查询,它返回“ValueError:hour必须在0..23中”筛选日期:

在models.py中:

class handoff_model(models.Model):
    batch = models.ForeignKey(batch_def_model, on_delete=models.CASCADE)
    date = models.DateField(blank=True, null=True)

class batch_def_model(models.Model):
    name = models.CharField(max_length=200)
    start_time = models.TimeField(blank=True, null=True)
在views.py中:

def ho_open(request):
    date = '2019-07-29'
    all_b = batch_def_model.objects.all()
    for b in all_b:
        if not handoff_model.objects.filter(date=date, batch=b.name).exists():
            batch = handoff_model(batch=b, date=date)
            batch.save()
    handoff_list = handoff_model.objects.filter(date=date,batch__start_time__lt='08:00')
    return handoff_list
我的数据库中已经有一些“batch_def_model”对象。每次运行“ho_open”(更改硬编码日期)时,它应创建与“batch_def_model”相同的切换模型,但用于硬编码日期

当我将日期设置为“2019-07-29”时,它工作正常。日期为“2019-07-30”或“2019-07-31”时,我得到以下错误:

完整跟踪是:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 248, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 272, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 1179, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1068, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/cursors.py", line 250, in execute
    self.errorhandler(self, exc, value)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
    raise errorvalue
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/cursors.py", line 247, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/cursors.py", line 412, in _query
    self._post_get_result()
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/cursors.py", line 416, in _post_get_result
    self._rows = self._fetch_row(0)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/cursors.py", line 384, in _fetch_row
    return self._result.fetch_row(size, self._fetch_type)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 151, in typecast_time
    return datetime.time(int(hour), int(minutes), int(seconds), int((microseconds + '000000')[:6]))
ValueError: hour must be in 0..23

您有什么提示吗?

您的视图几乎没有变化。这将是我第一次开始猜测。由于您的开始时间是一个时间域实例(根据datetime.time实例。因此,批处理开始时间运算符的右侧也应该是datetime.time实例)

导入日期时间
def ho_打开(请求):
日期='2019-07-29'
all_b=batch_def_model.objects.all()
对于所有类型的b:
如果不是,则切换\u model.objects.filter(日期=日期,批次=b.name).exists():
批次=切换模式(批次=b,日期=日期)
batch.save()
切换\u列表=切换\u模型.objects.filter(日期=日期,批次\u开始\u时间\uu lt=日期时间.time(8,0))
返回切换列表

这是我的猜测,没有机会查看代码中的其他地方。如果它有效,我有有限的方法来测试它。如果有错误,请让我知道。

在您的视图中几乎没有更改。py。这将是我第一次开始猜测。因为您的开始时间是一个时间域实例(根据a datetime.time实例。因此,批处理开始时间lt运算符的右侧也应该是datetime.time实例

导入日期时间
def ho_打开(请求):
日期='2019-07-29'
all_b=batch_def_model.objects.all()
对于所有类型的b:
如果不是,则切换\u model.objects.filter(日期=日期,批次=b.name).exists():
批次=切换模式(批次=b,日期=日期)
batch.save()
切换\u列表=切换\u模型.objects.filter(日期=日期,批次\u开始\u时间\uu lt=日期时间.time(8,0))
返回切换列表

这是我的猜测,我没有机会查看代码中的其他地方。我有有限的方法来测试它,如果它有效。如果有错误,请告诉我。

日期格式设置的值是多少?看起来你“配置错误”这是。我没有设置日期格式。但无论如何,它在本例中是相关的?因为这对于除2019-07-30和2019-07-31之外的所有日期都可以正常工作。这似乎不是一个日期格式问题。您可以验证如果设置默认开始时间会发生什么吗?我担心django试图从
start\u time
读取小时来执行request
batch\u start\u time\uu lt='08:00'
未经验证的
start\u time
不是空的Hello Sylvain。存在任何没有start\u time的“batch\u def\u模型”。所有记录都已设置了自己的“start\u time”。日期格式设置的值是多少?看起来您“配置错误”这是。我没有设置日期格式。但无论如何,它在本例中是相关的?因为这对于除2019-07-30和2019-07-31之外的所有日期都可以正常工作。这似乎不是一个日期格式问题。您可以验证如果设置默认开始时间会发生什么吗?我担心django试图从
start\u time
读取小时来执行req未经验证的uest
batch\u start\u time\uu lt='08:00'
未经验证的uest
start\u time
不是空的Hello Sylvain。存在任何没有start\u time的“batch\u def\u模型”。所有记录都有自己的“start\u time”已设置。已将完整跟踪添加到问题body@DenisSoto我无法重现我的问题。一旦我重现,我会告诉你,如果我有解决方案。完整跟踪添加到问题body@DenisSoto我无法重现我的问题。一旦我重现,我会告诉你,如果我有解决方案。
handoff_list = handoff_model.objects.filter(date=date,batch__start_time__lt='08:00')