繁体   English   中英

从 shell 更新 Django model object 字段

[英]Update Django model object field from shell

Model 字段仅将一些 zip 代码显示为 4 个字符,例如:1234

我想通过在开头添加“0”将所有 4 个字符的 zip 代码更改为 5 个,例如:01234

试图从 shell 找到一种方法来做到这一点,因为我有几千个对象

从 app.models 导入条目

我试过:

  1. 条目.objects.filter(len(zip_code)==4).update("0"+zip_code)
  2. 条目.objects.filter(len(zip_code)==4).update(f("0"+{zip_code}))

错误返回:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM