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

462
Views
¿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 answers
Answer question

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 Report
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!