【发布时间】:2019-07-28 16:27:55
【问题描述】:
我正在尝试通过执行空迁移将属性之一的字段类型从 CharField 更改为 DecimalField,并通过使用以下内容填充迁移日志来填充新字段:
from __future__ import unicode_literals
from django.db import migrations
from decimal import Decimal
def populate_new_col(apps, schema_editor): #Plug data from 'LastPrice' into 'LastPrice_v1' in the same model class 'all_ks'.
all_ks = apps.get_model('blog', 'all_ks')
for ks in all_ks.objects.all():
if float(ks.LastPrice): #Check if conversion to float type is possible...
print ks.LastPrice
ks.LastPrice_v1, created = all_ks.objects.get_or_create(LastPrice_v1=Decimal(float(ks.LastPrice)*1.0))
else: #...else insert None.
ks.LastPrice_v1, created = all_ks.objects.get_or_create(LastPrice_v1=None)
ks.save()
class Migration(migrations.Migration):
dependencies = [
('blog', '0027_auto_20190301_1600'),
]
operations = [
migrations.RunPython(populate_new_col),
]
但我在尝试迁移时不断收到错误消息:
TypeError: Tried to update field blog.All_ks.LastPrice_v1 with a model instance, <All_ks: All_ks object>. Use a value compatible with DecimalField.
我错过了将字符串转换为十进制的内容吗? 仅供参考,“LastPrice”是 CharField 的旧属性,“LastPrice_v1”是 DecimalField 的新属性。
【问题讨论】:
标签: django python-2.7 django-models sqlite