2011-03-22 13 views
16

मुझे नहीं पता कि शीर्षक क्विएस्टियन के साथ मैं स्पष्ट हूं, मैं क्या करना चाहता हूं अगला मामला है:django सामग्री प्रकार - उदाहरण बनाने के लिए सामग्री प्रकार के मॉडल वर्ग कैसे प्राप्त करें?

>>> from django.contrib.contenttypes.models import ContentType 
>>> ct = ContentType.objects.get(model='user') 
>>> ct.model_class() 
<class 'django.contrib.auth.models.User'> 
>>> ct_class = ct.model_class() 
>>> ct_class.username = 'hellow' 
>>> ct_class.save() 
TypeError: unbound method save() must be called with User instance as first argument  (got nothing instead) 

मैं बस सामग्री प्रकारों के माध्यम से प्राप्त होने वाले किसी भी मॉडल को तुरंत चालू करना चाहता हूं। इसके बाद मुझे form = create_form_from_model(ct_class) जैसे कुछ करने की आवश्यकता है और इस मॉडल के रूप को उपयोग करने के लिए तैयार करें।

अग्रिम धन्यवाद!

उत्तर

30

आपको कक्षा का एक उदाहरण बनाने की आवश्यकता है। ct.model_class() कक्षा का भुगतान करता है, इसका एक उदाहरण नहीं। __) ct_instance .__ वर्ग objects.all (- इस के साथ मैं के गतिशील रूपों बनाने के लिए formset कारखाने का उपयोग कर सकते हैं:

IPython सलाह
+0

शांत के लिए !, और अगर मैं क्वेरीसमूहों बनाना चाहते

>>> from django.contrib.contenttypes.models import ContentType >>> ct = ContentType.objects.get(model='user') >>> ct_class = ct.model_class() >>> ct_instance = ct_class() >>> ct_instance.username = 'hellow' >>> ct_instance.save() 
panchicore

+0

आप क्वेरी से सीधे क्वेरीसेट भी प्राप्त कर सकते हैं - 'ct_class.objects.all()'। – Blair

5

iPython या स्वत: पूर्ण आपका सबसे अच्छा दोस्त है। आपकी समस्या यह है कि आप Model पर सहेज रहे हैं। आपको एक उदाहरण पर सहेजने की जरूरत है।

ContentType.objects.latest('id').model_class() 

some_ctype_model_instance = some_ctype.model_class()() 
some_ctype_model_instance.user = user 
some_ctype_model_instance.save() 

some_instance = some_ctype.model_class().create(...) 
+1

+1: का अनुसरण करें। मुझे आवश्यक सभी उदाहरण। धन्यवाद! – panchicore

संबंधित मुद्दे