2012-09-05 8 views
9

Desciption में मॉडल का नाम स्ट्रिंग का उपयोग एक मॉडल वस्तु प्राप्त करने के लिए:कैसे Django

मैं एक सामान्य समारोह

def gen(model_name,model_type): 
     objects = model_name.objects.all() 
     for object in objects: 
      object.model_type = Null  (Or some activity) 
      object.save() 

मैं ऊपर कैसे प्राप्त कर सकते है? क्या यह संभव है?

उत्तर

29

मैं get_model का प्रयोग करेंगे:

from django.db.models import get_model 

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

शानदार उत्तर! आपके पास वोटों के लिए अधिक वोट होना चाहिए! +1 –

+1

हाय। मुझे एक त्रुटि मिलती है जो कहती है कि 'पहली पंक्ति में नाम get_model' आयात नहीं कर सकता है। क्या नवीनतम Django संस्करण में कुछ भी बदल गया? – Y2H

+0

@ वाई 2 एच हां, यहां देखें: https://stackoverflow.com/questions/4881607/django-get-model-from-string –

3

यदि आप 'app_label.model_name' में पास करते हैं तो आप contenttypes उदा।

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

Django 1.5 के लिए पूर्ण जवाब है:

from django.db.models.loading import AppCache 

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

Django 1.7 के रूप में django.db.models.loadingis deprecated पक्ष में (1.9 में हटा दिया जाना चाहिए) नई एप्लिकेशन लोडिंग सिस्टम का। 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'> 
>>>