Копирование столбца базы данных в другой столбец в Django
Я пишу миграцию, которая требует, чтобы я заполнил поле существующими данными из другого поля (с тем же типом и ограничениями). Можно ли в Django скопировать данные за одну операцию? Столбец назначения уже существует, когда мне нужно скопировать данные.
В SQL я бы написал что-то вроде этого:
UPDATE my_table SET column_b = column_a;
Edit
Текущий ответ предполагает цикл над экземплярами модели, но именно этого я хочу избежать. Может ли это быть сделано без петля?
1 ответ:
Как упоминалось в комментарии, Вы можете просто написать миграцию для этого. Я думаю, что ниже должно работать, хотя я не проверял его. Он использует Объект QuerySet API обновления и 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(): 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), ]
Comments