2010-08-23 18 views
5

मैं django मॉडल के सभी क्षेत्रों को फिर से कैसे प्राप्त और पुनर्प्राप्त कर सकता हूं?Django मॉडल iterate फ़ील्ड

मुझे पता है कि foo.item._meta.get_all_field_names() मुझे सभी फ़ील्ड नाम लाता है। मॉडल उदाहरण पर मैं उन क्षेत्रों (उनके वास्तविक मूल्यों सहित) तक कैसे पहुंच सकता हूं? (सामान्य नोटेशन foo.fieldname को छोड़कर)।

मुझे अपने मॉडल के लिए अपने कई कस्टम संबंधों सहित कस्टम आउटपुट बनाने के लिए इसकी आवश्यकता है। कोई विचार?

उत्तर

8

कैसे के बारे में:

getattr(foo.__class__, <field_name>) 

यह आपको क्षेत्र वस्तु के बजाय दिया मॉडल उदाहरण में मूल्य देना चाहिए। आप दिए गए मॉडल insance में फ़ील्ड का मान चाहते हैं तो आप इसे इस कॉल कर सकते हैं:

getattr(foo, <field_name>) 
+0

जैसा कि आपने स्वयं का उल्लेख किया है, यह केवल मुझे फ़ील्ड ऑब्जेक्ट देता है। मुझे दिए गए मॉडल उदाहरण के फ़ील्ड मान की आवश्यकता है। तदनुसार संपादित प्रश्न ... –

+0

मैंने जवाब संपादित किया है, उम्मीद है कि इससे मदद मिलती है। – gruszczy

2

यह बदसूरत दिखता है, लेकिन यह काम करेगा:

for each in model_instance._meta.fields: 
    print each.value_from_object(model_instance) 

यही कहा, मैं एक और सुझाव है। यह देखते हुए कि आपकी आवश्यकता

मेरे मॉडल के लिए अपने कई कस्टम संबंधों सहित कस्टम आउटपुट बनाने के लिए है।

कैसे serializing एक उपयुक्त प्रारूप (XML/JSON) के लिए उदाहरण है और फिर उस पर काम कर के बारे में? यह _meta या किसी भी आंतरिक तरीकों (जो संभवतः बदल सकता है) पर निर्भरता से बचाता है।

+1

मनोज आपके जोड़ों के लिए धन्यवाद। बदसूरत अभी भी मेरे कई लोगों की समस्या का समाधान नहीं करता है :(मुझे लगता है मुझे क्रमबद्धता के लिए जाना होगा! –

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