1
I次のシナリオがあります。ジャンゴ - 別のモデルに属性を移動および削除する方法、それ
class C():
y = models.Integer...
z = models.Integer...
class D():
y2 = models.Integer...
z2 = models.Integer...
私は属性yからデータをコピーし、Y2にそれを貼り付けるに。さて、私は仕事をするデータ移行を作成しました。私はまた、コードは次のようになりますので、クラスCから属性を削除したい
from greatapp.models import C, D
class Migration(migrations.Migration):
def move_info_to_class_d(apps, schema_editor):
objs = C.objects.all()
for obj in objs.iterator():
d = D.objects.create(y2=obj.y)
operations = [
migrations.RunPython(move_info_to_class_d)
]
お知らせ:一言で言えば
class C():
z = models.Integer...
class D():
y2 = models.Integer...
z2 = models.Integer...
すべてが右、OKに見えますか?コミットする時間。
ああ、待ってください!このコードを実行する次の人は、データ移行がもはや存在しない属性(この場合はy)にアクセスしようとしているため、エラーが発生します。
属性を別のモデルクラスにコピーしてソースクラスから削除する回避策(.sqlファイルは不要)を知っていますか?
これは、感謝しました! ps:私はiterator()を使用して内部キャッシュを無効にしました。これは、私のPCがループなしで実行されているときにメモリが不足していたからです(本当に大きなデータセットです) – almanegra