Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
Cambiar el nombre de un modelo de superclase de Django y actualizar los punteros de subclase correctamente

Tengo problemas para refactorizar una superclase en Django v2.2.12 que involucra tres modelos, con un modelo de superclase y dos modelos de subclase:

 class BaseProduct(models.Model): name = models.CharField() description = models.CharField() class GeneralProduct(BaseProduct): pass class SoftwareProduct(BaseProduct): pass

El modelo BaseProduct debe cambiarse de nombre a solo Product , así que cambié este código a:

 class Product(models.Model): name = models.CharField() description = models.CharField() class GeneralProduct(Product): pass class SoftwareProduct(Product): pass

Y luego ejecutó python manage.py makemigrations , en el que Django parece ver correctamente qué cambió:

 Did you rename the yourapp.BaseProduct model to Product? [y/N] y Did you rename generalproduct.baseproduct_ptr to generalproduct.product_ptr (a OneToOneField)? [y/N] y Did you rename softwareproduct.baseproduct_ptr to softwareproduct.product_ptr (a OneToOneField)? [y/N] y Migrations for 'yourapp': .../yourapp/migrations/002_auto_20200507_1830.py - Rename model BaseProduct to Product - Rename field baseproduct_ptr on generalproduct to product_ptr - Rename field baseproduct_ptr on softwareproduct to product_ptr

Hasta aquí todo bien. Django ve que se cambió el nombre de la superclase, y sabe que sus propios valores ..._ptr autogenerados que usa para rastrear la herencia del modelo también deben actualizarse en la base de datos.

La migración resultante que se le ocurre parece tan concisa como debería ser:

 # Generated by Django 2.2.12 on 2020-05-07 18:30 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('yourapp', '0001_initial'), ] operations = [ migrations.RenameModel( old_name='BaseProduct', new_name='Product', ), migrations.RenameField( model_name='generalproduct', old_name='baseproduct_ptr', new_name='product_ptr', ), migrations.RenameField( model_name='softwareproduct', old_name='baseproduct_ptr', new_name='product_ptr', ), ]

Todo parece perfecto, pero aplicar esa migración usando python manage.py migrate falla:

 Running migrations: Applying yourapp.0002_auto_20200507_1830...Traceback (most recent call last): [...] File ".../python3.7/site-packages/django/db/migrations/executor.py", line 245, in apply_migration state = migration.apply(state, schema_editor) File ".../python3.7/site-packages/django/db/migrations/migration.py", line 114, in apply operation.state_forwards(self.app_label, project_state) File ".../python3.7/site-packages/django/db/migrations/operations/models.py", line 340, in state_forwards state.reload_models(to_reload, delay=True) File ".../python3.7/site-packages/django/db/migrations/state.py", line 165, in reload_models self._reload(related_models) File ".../python3.7/site-packages/django/db/migrations/state.py", line 191, in _reload self.apps.render_multiple(states_to_be_rendered) File ".../python3.7/site-packages/django/db/migrations/state.py", line 308, in render_multiple model.render(self) File ".../python3.7/site-packages/django/db/migrations/state.py", line 579, in render return type(self.name, bases, body) File ".../python3.7/site-packages/django/db/models/base.py", line 253, in __new__ base.__name__, django.core.exceptions.FieldError: Auto-generated field 'baseproduct_ptr' in class 'SoftwareProduct' for parent_link to base class 'BaseProduct' clashes with declared field of the same name.

Busqué en la web ese error, así como para cambiar el nombre de un modelo de Django que es una superclase para otros modelos, pero no parece haber ninguna documentación (detectable), publicaciones de blog o respuestas de SO que hablen sobre este problema.

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda