在一列中使用多个值循环 Django 查询集

Looping Django queryset with multiple values in a column

我正在单步执行 pdb

在models.py

class MyDataModel(models.Model):
    id_in_database = models.IntegerField(primary_key=True, blank=False, null=False)
    foo = models.CharField(max_length=50, blank=True, null=True)

sqllite table

|id|foo|
|1|55|
|2|55,22|

错误:

decimal.InvalidOperation: Invalid literal for Decimal:

for r in my_queryset: print(r.foo)

MyDataModel.objects.filter(id=2)

但不适用于

MyDataModel.objects.filter(id=1)

这是为什么?在 foo 中设置具有两个值的列有什么特别之处吗?

按照评论中的建议添加跟踪:

File "/home/ubuntu/myproject/myapp/views.py", line 81, in parse_myline
    for r in my_queryset:
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 258, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 1074, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 52, in __iter__
    results = compiler.execute_sql()
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/sql/compiler.py", line 879, in execute_sql
    return list(result)
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/sql/compiler.py", line 1239, in cursor_iter
    sentinel):
  File "/usr/local/lib/python3.4/dist-packages/django/db/models/sql/compiler.py", line 1238, in <lambda>
    for rows in iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
  File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 102, in inner
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/django/db/backends/sqlite3/base.py", line 72, in <lambda>
    return lambda s: conv_func(s.decode('utf-8'))
  File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 165, in typecast_decimal
    return decimal.Decimal(s)
  File "/usr/lib/python3.4/decimal.py", line 595, in __new__
    "Invalid literal for Decimal: %r" % value)
  File "/usr/lib/python3.4/decimal.py", line 4050, in _raise_error
    raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: 'Weekday'

MyDataModel.foo 是 models.CharField,而您正试图从中获取 Decimal。类型不匹配。为 foo:

尝试 models.DecimalField
class MyDataModel(models.Model):
    id_in_database = models.IntegerField(primary_key=True, blank=False, null=False)
    foo = models.DecimalField(max_digits=5, decimal_places=2)

您将需要运行 manage.py makemigrations manage.py migrate 如果表中已有数据,这可能会有点问题。这让我想知道您是否在 sql 表中手动输入了值“55,22”...