Копирование столбца базы данных в другой столбец в Django



Я пишу миграцию, которая требует, чтобы я заполнил поле существующими данными из другого поля (с тем же типом и ограничениями). Можно ли в Django скопировать данные за одну операцию? Столбец назначения уже существует, когда мне нужно скопировать данные.



В SQL я бы написал что-то вроде этого:



UPDATE my_table SET column_b = column_a;


Edit



Текущий ответ предполагает цикл над экземплярами модели, но именно этого я хочу избежать. Может ли это быть сделано без петля?

499   1  

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

    Ничего не найдено.