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

466
Vistas
¿Por qué `apps.get_model()` de Django devuelve un objeto `__fake__.MyModel`?

Estoy escribiendo un script de migración de Django personalizado. Según los documentos de django sobre migraciones personalizadas , debería poder usar mi modelo con respecto a apps.get_model() . Sin embargo, al intentar hacer esto me sale el siguiente error:

 AttributeError: type object 'MyModel' has no attribute 'objects'

Creo que esto tiene que ver con que el registro de aplicaciones no está listo, pero no estoy seguro.

Código de muestra:

 def do_thing(apps, schema_editor): my_model = apps.get_model('app', 'MyModel') objects_ = my_model.objects.filter( some_field__isnull=True).prefetch_related( 'some_field__some_other_field') # exc raised here class Migration(migrations.Migration): atomic = False dependencies = [ ('app', '00xx_auto_xxx') ] operations = [ migrations.RunPython(do_thing), ]

Una declaración de impresión simple del valor de retorno de apps.get_model() muestra lo siguiente: <class '__fake__.MyModel'> . No estoy seguro de qué es esto, y si es el resultado de no estar preparado.

EDITAR:

No pude encontrar ningún recurso para explicar por qué obtengo un objeto __fake__ , así que decidí jugar con el código. Conseguí que funcionara adelantándose a las apps de los argumentos, como se puede ver aquí:

 def do_thing(apps, schema_editor): from django.apps import apps my_model = apps.get_model('app', 'MyModel') objects_ = my_model.objects.filter( some_field__isnull=True).prefetch_related( 'some_field__some_other_field') # no more exc raised here

Todavía estoy confundido y cualquier ayuda sería apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los objetos falsos son modelos históricos . Aquí está la explicación de Django docs :

Cuando ejecuta migraciones, Django trabaja a partir de versiones históricas de sus modelos almacenados en los archivos de migración.

[...]

Debido a que es imposible serializar código Python arbitrario, estos modelos históricos no tendrán ningún método personalizado que haya definido. Sin embargo, tendrán los mismos campos, relaciones, administradores (limitados a aquellos con use_in_migrations = True ) y opciones Meta (también versionadas, por lo que pueden ser diferentes de las actuales).

En caso de que los objects sean un administrador personalizado, puede configurar use_in_migrations = True para que esté disponible en las migraciones.

over 4 years ago · Santiago Trujillo Denunciar
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