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

472
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
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