मेरे पास एक Django मॉडल है:
class ग्राहक (models.Model): first_name = Model.CharField (max_length = 20, null = True, blank = true) last_name = models.CharField (max_length = 25, null = true, रिक्त = सत्य) पता = मॉडल.कारफिल्ड (max_length = 60, null = True, blank = सच =) = 2 मॉडल =। मॉडल =। मॉडल = 2 = शून्य = सही =) = = मॉडल। सीएआरफील्ड (अधिकतम_ लैंग = 40, रिक्त = सच, रिक्त = सत्य) राज्य = मॉडल। वहां से, मैंने एक मॉडल फ़ार्म बनाया: वर्ग CustomerForm (forms.ModelForm): कक्षा मेटा: मॉडल = ग्राहक
/ कोड>
मैं अपने टेम्प्लेट में दिखाए जा सकने वाली विशिष्ट जानकारी के अनुसार उपयोगकर्ता के बदल सकते हैं। उदाहरण के लिए, यदि मैं ग्राहकों को अपना नाम बदलना चाहता हूं, तो मैं एक ऐसा प्रपत्र दिखाना चाहूंगा जिसमें केवल फ़ील्ड 'first_name' और 'last_name' हो।
ऐसा करने का एक तरीका प्रत्येक फ़ील्ड स्निपेट के लिए प्रत्येक मॉडल स्निपेट के लिए एक मॉडल फॉर्म बनाने के लिए होगा ... नाम उदाहरण के लिए, ऐसा कुछ दिखाई देगा:
class CustomerFormName (forms.ModelForm): क्लास मेटा: मॉडल = ग्राहक क्षेत्र = ('प्रथम_नाम', 'अंतिम_नाम') यह बहुत ही अजीब और अनम्य लगता है। मैं क्या करना चाहता हूं, रनटाइम पर खेतों को निर्दिष्ट करने में सक्षम होता है, इसलिए जब मैं व्यू से टेम्प्लेट पर पास करता हूं, तो मैं यह तय कर सकता हूं कि मैं कौन से फ़ील्ड दिखाना चाहूंगा। मैं इसे कैसे सेट कर सकता हूं ताकि मैं रनटाइम पर एक फार्म के लिए फ़ील्ड सेट करूँ? मैं इस तरह से कुछ देखने के लिए अंतिम शब्दकोष को पसंद करता हूं:
{'name_change_form': CustomerFormName (& lt; फ़ॉर्म केवल प्रथम_नाम और अंतिम_नाम & gt;), 'address_change_form': CustomerFormName (& lt ; केवल पता फ़ील्ड के साथ प्रपत्र & gt;)} तब, मुझे पता है कि जब भी मैं आउटपुट name_change_form.as_p करता हूं, तो मेरे पास बिल्कुल फार्म फ़ील्ड होंगे जो मैं ढूंढ रहा हूं।
<पी> विचार? इसके अलावा, यह करने के लिए एक बेहतर तरीका सुझाए बिना स्वतंत्र महसूस करें।
आयात करें django.forms से ModelForm जहां से आयात करें ग्राहक डीएफ़ formClassFactory (मॉडल, फ़ील्ड): एफएफ = फील्ड्स मिमी = मॉडल वर्ग formClass (ModelForm): क्लास मेटा: मॉडल = मिमी फ़ील्ड = एफएफ रिटर्न फॉर्म क्लास form_class = formClassFactory (('first_name', 'last_name')) / कोड>
Comments
Post a Comment