je le scénario suivant:Django - Comment se déplacer attribut à un autre modèle et le supprimer
class C():
y = models.Integer...
z = models.Integer...
class D():
y2 = models.Integer...
z2 = models.Integer...
Je veux copier les données de l'y d'attribut et de le coller à y2. Ok, j'ai créé une migration de données qui fait le travail. En un mot:
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)
]
Notez que je veux aussi supprimer l'attribut de la classe C, de sorte que le code ressemblerait à ceci:
class C():
z = models.Integer...
class D():
y2 = models.Integer...
z2 = models.Integer...
Tout semble ok, pas vrai? Temps de commettre
Oh, attendez! La prochaine personne qui exécute ce code obtiendra une erreur, car la migration de données tente d'accéder à un attribut qui n'existe plus (y dans ce cas).
Quelqu'un sait-il une solution de contournement (qui n'a pas besoin de fichiers .sql) pour copier l'attribut à une autre classe de modèle, puis le supprimer de la classe source?
Cela a fonctionné, merci !. ps .: J'ai utilisé iterator() pour désactiver le cache interne parce que mon pc manquait de mémoire à chaque fois qu'il exécutait la boucle sans lui (c'est un très gros ensemble de données) – almanegra