La plupart des modèle de "chaînes" apparaissent comme la forme "appname.modelname" alors vous voudrez utiliser cette variation sur get_model
from django.db.models.loading import get_model
your_model = get_model ( *your_string.split('.',1) )
La partie de l'django code qui tourne habituellement ces chaînes dans un modèle est un peu plus complexe à partir d' 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)
Pour moi, cela semble être une bonne affaire pour la division de cette dans une seule fonction dans le code de base. Toutefois, si vous savez que vos chaînes sont dans "App.Modèle", les deux liner ci-dessus va travailler.