[英]Update Django model object field from shell
Model 字段仅将一些 zip 代码显示为 4 个字符,例如:1234
我想通过在开头添加“0”将所有 4 个字符的 zip 代码更改为 5 个,例如:01234
试图从 shell 找到一种方法来做到这一点,因为我有几千个对象
从 app.models 导入条目
我试过:
错误返回:
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'zip_code' is not defined
您可以为此进行迁移:
首先,创建一个空迁移:
python manage.py makemigrations your_app_name --empty
在新创建的迁移中,定义您的 function:
def update_zipcodes(apps):
YourModel = apps.get_model("your_app_name", "YourModel") # django will retrieve your model here
for obj in YourModel.objects.all():
if len(obj.zip_code) == 4:
old_zip_code = obj.zip_code
obj.zip_code = f'0{old_zip_code}'
obj.save()
然后在列表操作(在文件底部)中调用 function。 你的列表应该是这样的
operations = [
# migrations.RunPython.noop can be replaced here with a reverse function
# (in case you want to "un-apply" that migration later for some reason)
migrations.RunPython(update_zipcodes, migrations.RunPython.noop),
]
最后,您可以通过调用以下方式应用您的迁移:
python manage.py migrate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.