2010-10-06 8 views
10

ठीक है, मैं यह जानने के लिए घंटों तक घूर रहा हूं कि क्या हो रहा है, इसका कोई फायदा नहीं हुआ। मैं इसे 'उदाहरण' कीवर्ड का उपयोग कर मॉडलफॉर्म बनाने का प्रयास कर रहा हूं ताकि इसे मौजूदा मॉडल उदाहरण पास किया जा सके और फिर इसे सहेज सकें।Django ModelForm कोई त्रुटि के साथ सत्यापन विफल रहता है

class TempRuleFieldForm(ModelForm): 
    class Meta: 
     model = RuleField 

और यहाँ कोड मैं चल रहा हूँ है::

>>> m = RuleField.objects.get(pk=1) 
>>> f = TempRuleFieldForm(instance=m) 
>>> f.is_valid() 
False 

मॉडल वस्तु यहाँ ModelForm (इस समस्या के कारण की पहचान करने के लिए अपने प्रयास में मूल से काफी छीन) है (ऊपर m) मान्य है और यह ठीक है, लेकिन फॉर्म मान्य नहीं होगा। अब, जहां तक ​​मैं कह सकता हूं, यह कोड Django दस्तावेज़ उदाहरण के समान है: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method, हालांकि स्पष्ट रूप से मुझे कुछ याद आ रही है। मैं कुछ ताजा आंखों की सराहना करता हूं कि मुझे यह बताने के लिए कि मुझे क्या गलत है।

धन्यवाद

+2

'f.errors' प्रिंट आउट क्या करता है? – sdolan

उत्तर

21

ध्यान रखें कि आपके लिंक f.is_valid() फोन नहीं है, यह सिर्फ सीधे बचाता है। यह संभावित रूप से थोड़ा भ्रामक है।

मुद्दा यह है कि सिर्फ एक instance पैरामीटर के साथ एक रूप instantiating लेकिन कोई data करता आंकड़ों के नहीं यह बाँध है, और प्रपत्र इसलिए मान्य नहीं है। आप देखेंगे कि f.is_bound गलत है।

दृश्यों के पीछे, instance वास्तव में initial डेटा उत्तीर्ण करने जैसा ही है, जैसा कि दस्तावेज़ नोट केवल प्रारंभ में डेटा प्रदर्शित करने के लिए उपयोग किया जाता है और सहेजने के लिए उपयोग नहीं किया जाता है। आपको शायद notes on bound and unbound forms पढ़ने से फायदा होगा।

+3

+1। "उदाहरण बाध्य नहीं है": यह सही तर्क है। –

+0

धन्यवाद, यह सही समझ में आता है। मुझे पता था कि यह कुछ आसान होगा ... – oogles

+0

सिर्फ स्पष्टीकरण के लिए, मैं f.is_valid() का उपयोग करने का कारण बस प्रश्न को और संक्षिप्त बनाना था। F.save() का उपयोग cleaned_data फ़ील्ड पर एक विशेषता Error के साथ विफल रहता है, जो फ़ॉर्म मान्य होने तक मौजूद नहीं है। तो जब भी मैं कोड _exactly_ का उपयोग कर रहा था, क्योंकि यह मेरे द्वारा पोस्ट किए गए लिंक में है (f.is_valid() के बजाय f.save() का उपयोग करके) यह अभी भी असफल रहा था। – oogles

3

यदि आप अभी भी डेटाबेस में मौजूद ऑब्जेक्ट को सत्यापित करना चाहते हैं, तो आप इसे पहले क्रमबद्ध कर सकते हैं और उसके बाद फ़ॉर्म बना सकते हैं।

from django.utils import simplejson 
from django.core.serializers import serialize 

(...) 

fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields'] 
form = forms.MyForm(fields_dict) 
if form.is_valid 

यह शायद यह करने के लिए सबसे अच्छा तरीका है, लेकिन केवल एक है कि मैं एक मॉडल से बाध्य प्रपत्र प्राप्त करने के लिए मिल गया है नहीं है। मुझे इसकी आवश्यकता है क्योंकि मैं डेटाबेस में वर्तमान डेटा को मान्य करना चाहता हूं। मैं एक सवाल बनाने के बाद से मुझे नहीं लगता कि इस कर का सबसे अच्छा तरीका है:

Transform an unbound form to a bound one?

+2

से ऊपर के उदाहरण में काम करने का कोई तरीका है या नहीं, मैं पूरे "बाध्य डेटा को फॉर्म" चीज़ में याद कर रहा था, जो आप धारावाहिकता के साथ प्राप्त कर रहे हैं । मेरा मानना ​​है कि Django के django.forms.models.model_to_dict कहा गया सीरियलाइजेशन से बेहतर होगा हालांकि - अपने प्रश्न का मेरा उत्तर देखें: [लिंक] (http://stackoverflow.com/questions/8993749/transform-an-unbound-form-to -एक ही सीमित है-एक # 8,996,585)। – oogles

0

यह ओ पी के लिए एक समाधान नहीं है, लेकिन यह पोस्ट शीर्षक है, जिसमें बहुत अधिक है के लिए है गूगल। इसलिए मैं here से, वैसे भी यह पोस्ट करेंगे:

आप पहले से ही अपने रूप request.POST or None का उपयोग करने के request.POST दे रहे हैं, तो लेकिन यह अभी भी त्रुटियों के बिना अवैध है, जाँच वहाँ किसी भी रीडायरेक्ट हो रहा नहीं है। एक रीडायरेक्ट आपके POST डेटा को खो देता है और आपका फॉर्म अमान्य नहीं होगा क्योंकि यह अनबाउंड है।