2011-12-17 15 views
36

मेरे views.py में मैं फ़ॉर्म को सहेजने से पहले मान असाइन करता हूं। के बाद से चर की सूची थोड़ा लंबा हो गया,ऑब्जेक्ट आइटम असाइनमेंट त्रुटि का समर्थन नहीं करता

projectForm.lat = session_results['lat'] 
projectForm.lng = session_results['lng'] 

अब, मैं session_results पर निम्नलिखित पाश के साथ (के रूप में एडम here द्वारा वर्णित) पाश करना चाहता था:: मैं इसे निम्नलिखित तरीके से करना करने के लिए इस्तेमाल

for k,v in session_results.iteritems(): 
    projectForm[k] = v 

लेकिन मुझे लूप समाधान के लिए त्रुटि 'Project' object does not support item assignment मिलती है। मुझे समझने में परेशानी है क्यों। Project मॉडल क्लास है, जिसे मैं मॉडलफॉर्म के लिए उपयोग करता हूं।

आपकी मदद के लिए धन्यवाद!

उत्तर

46

त्रुटि स्पष्ट प्रतीत होती है: मॉडल ऑब्जेक्ट आइटम असाइनमेंट का समर्थन नहीं करते हैं। MyModel.objects.latest('id')['foo'] = 'bar' यह वही त्रुटि फेंक देगा।

यह थोड़ा भ्रमित है कि अपने मॉडल उदाहरण projectForm कहा जाता है ...

एक पाश में कोड के अपने पहले ब्लॉक पुन: पेश करने के लिए, आप setattr

for k,v in session_results.iteritems(): 
    setattr(projectForm, k, v) 
11

एक और तरीका है उपयोग करने के लिए जोड़ने होगा की जरूरत है __getitem__, __setitem__ समारोह

def __getitem__(self, key): 
    return getattr(self, key) 

अब आप एक्सेस करने के लिए स्वयं [कुंजी] का उपयोग कर सकते हैं।

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

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