Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

193
Views
la actualización del conjunto de consultas usando el objeto F () no funciona en las migraciones de datos

Estoy tratando de crear una migración de datos utilizando el método de conjunto de consultas de actualización. Tengo un proceso de migración complejo para mi caso, por lo que enfrenté el siguiente problema. el ejemplo sencillo

 from __future__ import unicode_literals from django.db import migrations, models def move_data(apps, schema_editor): MyModel = apps.get_model("my_app", 'MyModel') MyModel.objects.all().update(new_field=models.F('old_field')) class Migration(migrations.Migration): dependencies = [ ('orders', '0057_auto_20170410_1513'), ] operations = [ migrations.RunPython(move_data), ]

En mi caso obtuve FieldError. El objeto F () no puede resolver el campo old_field , pero si usaré algo como esto

 for obj in MyModel.objects.all(): obj.new_field=obj.old_field obj.save()

en vez de

 MyModel.objects.all().update(new_field=models.F('old_field'))

todo estará bien

Tengo algunos modelos heredados de un modelo base y necesito mover algunos campos del modelo secundario al principal. Así que hice esto con los siguientes pasos

  1. cambiar el nombre de los campos antiguos en niño
  2. crear los nuevos campos en padre
  3. mover datos de campos antiguos a campos nuevos
  4. eliminar los campos antiguos

Enfrenté esto en el paso 3 y no puedo entender por qué no funciona

¿Alguien puede dar alguna explicación de esto?

¿Está relacionado con el proceso de representación del estado del modelo de alguna manera?

UPD. La definición simplificada de modelos

 class Base(models.Model): pass class MyModel1(Base): pass class MyModel2(Base): field = models.IntegerField()

Paso 1 y 2: cambie el nombre del campo y cree en la clase base

 class Base(models.Model): field = models.IntegerField() class MyModel1(Base): pass class MyModel2(Base): old_field = models.IntegerField()

Paso 3: mover datos

Trabajará -

 for obj in MyModel2.objects.all(): obj.field=obj.old_field # the same as obj.base_ptr = obj.old_field; obj.base_ptr.save() obj.save()

no funcionará -

 MyModel2.objects.all().update(field=models.F('old_field'))
about 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!