2012-09-05 11 views

Respuesta

29

usaría get_model:

from django.db.models import get_model 

mymodel = get_model('some_app', 'SomeModel') 
+0

¡Excelente respuesta! ¡Deberías tener más votos para fo! +1 –

+1

Hola. Aparece un error que dice 'No se puede importar el nombre get_model' en la primera línea. ¿Cambió algo en la última versión de Django? – Y2H

+0

@ Y2H sí, mira aquí: https://stackoverflow.com/questions/4881607/django-get-model-from-string –

3

si pasa 'app_label.model_name' puede usar contenttypes p. Ej.

from django.contrib.contenttypes.models import ContentType 

model_type = ContentType.objects.get(app_label=app_label, model=model_name) 
objects = model_type.model_class().objects.all() 
0

La respuesta completa para Django 1.5 es:

from django.db.models.loading import AppCache 

app_cache = AppCache() 
model_class = app_cache.get_model(*'myapp.MyModel'.split('.',1)) 
17

Como de Django 1.7 el django.db.models.loadingis deprecated (a retirar en 1.9) en favor del nuevo sistema de carga de aplicaciones. El 1.7 docs give us lo siguiente en su lugar:

$ python manage.py shell 
Python 2.7.6 (default, Mar 5 2014, 10:59:47) 
>>> from django.apps import apps 
>>> User = apps.get_model(app_label='auth', model_name='User') 
>>> print User 
<class 'django.contrib.auth.models.User'> 
>>> 
Cuestiones relacionadas