将数据库列复制到 Django 中的另一个
Copy a database column into another in Django
我正在编写一个迁移,它要求我用另一个字段(具有相同类型和约束)的现有数据填充一个字段。在 Django 中是否可以在单个操作中复制数据?当我需要复制数据时目标列已经存在。
在SQL中,我会写这样的东西:
UPDATE my_table SET column_b = column_a;
编辑
当前的答案建议循环遍历模型实例,但这是我想避免的。可以不用循环吗?
如评论所述,您可以为此编写一个迁移。我认为下面的方法应该有效,但我还没有测试过。它使用 queryset update API and F 来避免循环
from __future__ import unicode_literals
from django.apps import apps
from django.db import migrations, models
from django.db.models import F
def copy_field(app, schema):
MyModel = apps.get_model('<your app>', 'MyModel')
MyModel.objects.all().update(column_a=F('column_b'))
class Migration(migrations.Migration):
dependencies = [
('<your app>', '<previous migration>'),
]
operations = [
migrations.RunPython(copy_field),
]
我正在编写一个迁移,它要求我用另一个字段(具有相同类型和约束)的现有数据填充一个字段。在 Django 中是否可以在单个操作中复制数据?当我需要复制数据时目标列已经存在。
在SQL中,我会写这样的东西:
UPDATE my_table SET column_b = column_a;
编辑
当前的答案建议循环遍历模型实例,但这是我想避免的。可以不用循环吗?
如评论所述,您可以为此编写一个迁移。我认为下面的方法应该有效,但我还没有测试过。它使用 queryset update API and F 来避免循环
from __future__ import unicode_literals
from django.apps import apps
from django.db import migrations, models
from django.db.models import F
def copy_field(app, schema):
MyModel = apps.get_model('<your app>', 'MyModel')
MyModel.objects.all().update(column_a=F('column_b'))
class Migration(migrations.Migration):
dependencies = [
('<your app>', '<previous migration>'),
]
operations = [
migrations.RunPython(copy_field),
]