2012-09-05 9 views

Odpowiedz

29

byłoby użyć get_model:

from django.db.models import get_model 

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

Świetna odpowiedź! Powinieneś mieć więcej głosów w górę! +1 –

+1

Witam. Pojawia się błąd z informacją "Nie można zaimportować nazwy get_model" w pierwszym wierszu. Czy coś się zmieniło w najnowszej wersji Django? – Y2H

+0

@ Y2H tak, patrz tutaj: https://stackoverflow.com/questions/4881607/django-get-model-from-string –

3

jeśli przekażesz "app_label.model_name", możesz użyć contenttypes np.

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

Pełną odpowiedź na Django 1.5 jest:

from django.db.models.loading import AppCache 

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

jako Django 1.7 django.db.models.loadingis deprecated (aby usunąć w 1,9) na korzyść nowego systemu ładowania aplikacji. Zamiast tego: 1.7 docs give us:

$ 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'> 
>>> 
Powiązane problemy