urls tutorial examples bootstrap django

tutorial - href django



django: la mejor forma de obtener el modelo de una instancia de ese modelo (2)

Digamos que my_instance es del modelo MyModel .
Estoy buscando una buena manera de hacerlo:

my_model = get_model_for_instance(my_instance)

No he encontrado ninguna manera realmente directa de hacer esto. Hasta ahora he llegado a esto:

from django.db.models import get_model my_model = get_model(my_instance._meta.app_label, my_instance.__class__.__name__)

¿Es esto aceptable? ¿Es incluso una forma segura de hacer las mejores prácticas para hacerlo?
También hay _meta.object_name que parece entregar lo mismo que __class__.__name__ . ¿Lo hace? Es mejor o peor? Si es así, ¿por qué?

Además, ¿cómo sé que obtengo el modelo correcto si la etiqueta de la aplicación aparece varias veces dentro del alcance del proyecto, por ejemplo, ''auth'' de ''django.contrib.auth'' y que también haya ''myproject.auth''?
¿Un caso como este haría que get_model no get_model confiable?

Gracias por cualquier sugerencia / punteros y compartir la experiencia!


my_new_instance = type(my_instance)()


my_model = type(my_instance)

Para probarlo, puedes crear otra instancia:

my_new_instance = type(my_instance)()

Es por eso que no hay una forma directa de hacerlo, porque los objetos python ya tienen esta característica.

actualizado...

Me gustó la respuesta de Marcinn que usa el type(x) . Esto es idéntico a lo que usó la respuesta original ( x.__class__ ), pero prefiero usar funciones que acceder a attribus mágicos. De esta manera, prefiero usar vars(x) a x.__dict__ , len(x) a x.__len__ y así sucesivamente.

actualizado 2 ...

Para instancias diferidas (mencionadas por @Cerin en comentarios) puede acceder a la clase original a través de instance._meta.proxy_for_model .