mayoría de las "cadenas" modelo aparecerá como la forma "appname.modelname" por lo que es posible que desee utilizar esta variación en get_model
from django.db.models.loading import get_model
your_model = get_model (*your_string.split('.',1))
La parte del código django que generalmente convierte tales cadenas en un modelo es un poco más compleja Esto de django/db/models/fields/related.py
:
try:
app_label, model_name = relation.split(".")
except ValueError:
# If we can't split, assume a model in current app
app_label = cls._meta.app_label
model_name = relation
except AttributeError:
# If it doesn't have a split it's actually a model class
app_label = relation._meta.app_label
model_name = relation._meta.object_name
# Try to look up the related model, and if it's already loaded resolve the
# string right away. If get_model returns None, it means that the related
# model isn't loaded yet, so we need to pend the relation until the class
# is prepared.
model = get_model(app_label, model_name,
seed_cache=False, only_installed=False)
Para mí, este parece ser un buen caso para dividir esto en una sola función en el código central. Sin embargo, si sabe que sus cadenas están en formato "Modelo de aplicación", las dos líneas anteriores funcionarán.
Esta solución está en desuso en Django 1.7, vea esta otra respuesta para la solución: http://stackoverflow.com/a/26126935/155987 –
Hola @mpen, le sugiero que actualice su respuesta. [En django 1.9 get_model se define en AppConfig] (https://docs.djangoproject.com/es/1.9/ref/applications/#django.apps.AppConfig.get_model): 'desde django.apps import AppConfig' – danihp
@danihp Gracias, agregué una nota. – mpen