यह काफी दिलचस्प लग रहा था, इसलिए मैं django.forms स्रोत के माध्यम से देख रहा था, विशेष रूप से मॉडलफॉर्म कार्यान्वयन के लिए देख रहा था। मुझे लगा कि एक मॉडलफॉर्म किसी दिए गए उदाहरण की आत्मनिरीक्षण में काफी अच्छा होगा, और ऐसा ही होता है कि एक आसान काम उपलब्ध है जो आपके रास्ते पर आपकी मदद कर सकता है।
>>> from django.forms.models import model_to_dict
>>> from django.contrib.auth.models import Group
>>> g = Group.objects.filter()[0]
>>> d = model_to_dict(g)
>>> d
{'permissions': [40, 41, 42, 46, 47, 48, 50, 43, 44, 45, 31, 32, 33, 34, 35, 36, 37, 38, 39], 'id': 1, 'name': u'Managers'}
>>>
जाहिर है, _meta
विशेषता undocumented क्योंकि यह एक आंतरिक कार्यान्वयन विस्तार है। मैं इसे जल्द ही किसी भी समय बदल नहीं देख सकता, इसलिए यह शायद उपयोग करने के लिए अपेक्षाकृत सुरक्षित है। आप जो करना चाहते हैं उसे करने के लिए आप स्टार्टर के रूप में ऊपर model_to_dict
फ़ंक्शन का उपयोग कर सकते हैं। कोई बदलाव नहीं होना चाहिए। यदि आप मॉडलों सहित रिकर्सिवली पर योजना बनाते हैं तो रिवर्स रिलेशनशिप से सावधान रहें।
एक अन्य एवेन्यू भी हो सकता है जिसे आप जांचना चाहते हैं। django-piston
एक विश्वसनीय ढांचा है जो कई emitters
घोषित करता है जो आपके लिए उपयोगी हो सकता है, खासकर BaseEmitter.construct()
विधि। आपको DictionaryEmitter
को आसानी से परिभाषित करने में सक्षम होना चाहिए जिसे आप रीस्टफुल सीरियलाइज़ेशन के अलावा अन्य उद्देश्यों के लिए उपयोग करते हैं।
स्रोत
2011-03-20 22:01:50
ओह अच्छा, 'model_to_dict सबसे बड़े कारणों 'मूल रूप से क्या मेरी समारोह कर रहा था है (मैं इसे calld' objectToDict' .. बीमार सिर्फ इतना है कि कोशिश संपादित करें:।। आह, यह foreignekys है, जो मैं मेरा क्या करना चाहते हैं का पालन नहीं करता मैं लगता है कि मुझे लगता है कि फोन और देख सकते हैं अपने खेतों, लेकिन मैं पहले से ही यह 'साथ _meta' क्षेत्रों तो मैं dnno टिप के लिए पकड़ने चक्र पर लिखा था। धन्यवाद, मैं अपने समारोह से यह ठीक हो (यदि वह पहले एक वस्तु यह सिर्फ उसके परिणाम का उपयोग करता देखा बनाया यथा-स्थान के बजाय आवर्ती) – Claudiu
नहीं, यह FKS का पालन नहीं करता, लेकिन आप एक एक model_to_dict रिकर्सिवली। के बाद से आप पहले से ही मिल गया यह काम कर रहा गया है, कोई चिंता नहीं। जैसा कि मैंने उल्लेख किया है, model_to_dict एक स्टार्टर के रूप में इस्तेमाल किया जा सकता के साथ foreign_key_id प्रत्येक पर की जगह कर सकते हैं, और तदनुसार अनुकूलित। –