Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
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'))
over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda