在一列中使用多个值循环 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”...
我正在单步执行 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.DecimalFieldclass 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”...