python - Django - make a form remember its checkbox values -
मैं एक आधार सेटअप का उपयोग करके इस प्रश्न का समाधान करूंगा:
# models.py class MyModel (models.Model): required_field = models.CharField ("कुछ लेबल", max_length = 10) another_required_field = models.CharField ("कुछ लेबल", max_length = 10) चेकबॉक्स = मॉडल। BooleanField ("कुछ लेबल") # रूप .पी क्लास MyForm (forms.ModelForm): क्लास मेटा: मॉडल = MyModel # views.py क्लास MyView (प्रपत्रदृश्य): form_class = MyForm template_name = 'some-template.html'
अब मान लें कि मैं चेकबॉक्स को चेक करता हूं और केवल एक आवश्यक फ़ील्ड को भरता हूं। फॉर्म स्पष्ट रूप से सत्यापन नहीं पास करता है और त्रुटियों और सभी के साथ वापस आ जाता है। समस्या यह है कि चेकबॉक्स का मान वापस अनियंत्रित होता है यह सिर्फ एक बूलियन फिल्ड के साथ बड़ा सौदा नहीं है, लेकिन मैं एक परियोजना पर काम कर रहा हूं जहां मेरे पास बहुत से चेकबॉक्स हैं खरोंच से उन सभी की जांच करें बल्कि निराशा होती है इसलिए मुझे डीजेंगो के दस्तावेज पर एक जांच हुई और बोलेनफिल्ड के बारे में इस पैराग्राफ पर ठोकर खाई:
चूंकि सभी फील्ड उप-वर्गों की आवश्यकता है = डिफ़ॉल्ट रूप से सही, यहां सत्यापन स्थिति महत्वपूर्ण है। यदि आप अपने फॉर्म में एक बूलियन को शामिल करना चाहते हैं जो कि या तो सही या गलत (उदा। एक चेक या अनचेक किए गए चेकबॉक्स) हो सकता है, तो आपको बुलियनफिल्ड बनाने के दौरान आवश्यक = गलत पास करना चाहिए
और मैंने ऐसा किया:
# forms.py वर्ग MyForm (forms.ModelForm): def __init __ (स्वयं, * आर्ग्स, ** kwargs) : आत्म (मायफ़ॉर्म, स्वयं) .__ init __ (* args, ** kwargs) फ़ील्ड के लिए self.fields में: यदि isinstance (फ़ील्ड, forms.CheckboxInput): self.fields [field] .required = False class मेटा: मॉडल = MyModel
लेकिन यह काम नहीं कर रहा था। फिर, चेक बॉक्स सत्यापन के पास नहीं होने के बाद अपने राज्य को खो देते हैं, इसलिए मुझे लगता है कि मैं जो चाहूं वह नहीं था।
तो मेरा सवाल है, क्या इसका लाभ उठाने का कोई तरीका है? मुझे पूरा यकीन है कि वहाँ एक होना चाहिए, अगर आप में से कुछ मुझे सही दिशा में कम से कम ड्राइव कर सकें, तो यह अच्छा होगा। धन्यवाद: -)
संपादित करें कुछ डीबगिंग के बाद, मैंने इस मुद्दे को हल किया। बाहर खिसका जाता है मैं खस्ता रूपों के चेक बॉक्स के लिए कस्टम टेम्पलेट का उपयोग कर रहा था, और मुझे वहां एक छोटा बग मिला।
आपके विचार को request.POST
शब्द से फ़ॉर्म को पॉप्युलेट करने की आवश्यकता होगी:
def your_view (अनुरोध): form = MyForm (request.POST या none ) यदि request.method == 'POST' और form.is_valid (): form.save () # do whatever esle return प्रस्तुत करें (अनुरोध, 'your-template.html', {'form': form})
जब तक आप अनुरोध नहीं करते हैं। POST
डेटा, और / या उस मॉडल का एक उदाहरण जिसे आप संपादित कर रहे हैं, आपका फ़ॉर्म असंबद्ध होगा, और इसलिए कोई भी नहीं दिखाया जाएगा मूल्य जो POST डेटा या आपके मॉडल से मौजूद हैं यदि आप एक उदाहरण का संपादन कर रहे हैं, तो ऐसा दिखेगा:
def your_view (अनुरोध, आईडी): my_model_instance = MyModel.objects.get (pk = id) फ़ॉर्म = MyForm (request.POST या कोई नहीं, उदाहरण = my_model_instance) यदि request.method == 'POST' और form.is_valid (): form.save () # करें जो कुछ भी esle return प्रस्तुत करते हैं (अनुरोध, 'your-template.html', {'form': फ़ॉर्म})
Comments
Post a Comment