2011-11-30 16 views
8

में मैं इस फार्म है:Django रूप में छिपे हुए क्षेत्र नहीं cleaned_data

KeyError at /canvas/1/add-collaborator/ 
'canvas' 

:

class CollaboratorForm(forms.Form): 
    user = forms.CharField(label="Username",max_length=100) 
    canvas = forms.IntegerField(widget=forms.HiddenInput) 
    .... 
    def clean_user(self): 
     user = self.cleaned_data['user'] 
     canvas = self.cleaned_data['canvas'] 

ध्यान में रखते हुए मैं बस फोन कर रहा हूँ

if form.is_valid(): 

मैं त्रुटि मिलती है फायरबग के मुताबिक मूल्य पोस्ट हो रहा है, ऐसा लगता है कि यह मेरे साफ समारोह में नहीं लग रहा है। क्या मैं इसे गलत कर रहा हूँ?

संपादित करें: पोस्ट डेटा

canvas 1 
csrfmiddlewaretoken 2cb73be791b32ca9a41566082c804312 
user username 

EDIT2: मैं भी एक जवाब है कि मुझे बताओ कि clean_user समारोह, जहां प्राथमिक कुंजी है प्राथमिक कुंजी भेजने के लिए कर सकता है लेने के लिए तैयार हो जाएगा/1/ऊपर यूआरएल उदाहरण में। ध्यान में रखते हुए समारोह है कि कहा जाता है:

def canvas_add_collaborator(request, pk): 

तो मैं clean_user समारोह जो छिपी हुई फ़ील्ड आवश्यक नहीं के द्वारा अपनी समस्या को हल किया जा करने के लिए पी भेजना चाहते हैं।

+0

में इसका परीक्षण किया है क्या आप अपनी http पोस्ट की सामग्री जोड़ सकते हैं? EDIT2 के बारे में –

+0

। आप clean_user फ़ंक्शन में पीके पास कर सकते हैं। 'clean_user (self, pk)' –

उत्तर

9

आपको विधि नाम को साफ(), clean_user() को बदलने की आवश्यकता नहीं है। यदि आप केवल उपयोगकर्ता फ़ील्ड को मान्य कर रहे हैं तो 'कैनवास' cleaned_data में नहीं है।

+0

मुझे नहीं पता कि यह कैसे क्लिक नहीं किया गया, यह सही समझ में आता है। धन्यवाद। – Samsquanch

+0

क्या काम करना साफ() विधि संभव है? – Erwan

0

मैं मेरी समस्या हल (शायद नहीं सबसे अच्छा तरीका है, लेकिन काम करता है) इस का उपयोग करते हुए:

class CollaboratorForm(forms.Form): 
    .... 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('canvas', None) 
     super(CollaboratorForm, self).__init__(*args, **kwargs) 
तो मेरे विचार में

:

def canvas_add_collaborator(request, pk): 
    .... 
    form.canvas = pk 

शायद नहीं सबसे सुरुचिपूर्ण समाधान है, लेकिन यह काम करता है अभी के लिए। प्रतिक्रिया स्वागत है।

+1

मेरा जवाब देखें। आपको अपने स्वच्छ कार्य का नाम बदलने की जरूरत है। –

0

मैंने पाया कि फ़ील्ड की घोषणा में आदेश महत्वपूर्ण है, इसलिए यदि आप clean_user विधि में cleaned_data ['canvas'] तक पहुंचना चाहते हैं, तो आपको अपने फ़ील्ड में पहले कैनवास घोषित करना होगा। मैंने मॉडल फॉर्म

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