2009-01-28 17 views
16

मैं एक कस्टम फॉर्म फ़ील्ड बनाने और इसे बंद करने की कोशिश कर रहा हूं। यह Django का संस्करण 1.0 है।डीजेगो और कस्टम फॉर्म सत्यापन

यहाँ यहाँ मेरी प्रपत्र वस्तु

class UsernameField(forms.CharField): 
    def clean(self, values): 
     print "" 

है मैं इसे कैसे

class RegisterForm(forms.Form): 
    username = UsernameField(max_length=30, min_length=4) 
    password = forms.CharField(widget = forms.PasswordInput(), min_length=5) 
    password2 = forms.CharField(widget = forms.PasswordInput(), min_length=5) 
    email = forms.EmailField(max_length=75) 

फोन अब मैं कील में एक CharField के लिए डिफ़ॉल्ट मिनट/MAX_LENGTH चेकों रखना चाहते हैं .. लेकिन मैं कर सकते हैं ऐसा लगता है कि यह कैसे करना है।

यदि मैं कोई कोड साफ़() में डालता हूं तो उनको चेक नहीं किया जाता है। अगर मैं parent.clean() को कॉल करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है।

उत्तर

3

कि 1.0 में काम नहीं किया ... यहाँ

class UsernameField(forms.CharField): 
    def clean(self, request, initial=None): 
     field = super(UsernameField, self).clean(request) 

     from django.contrib.auth.models import User 
     user = User(username=request) 
     if user is not None: 
      raise forms.ValidationError("That username is already taken") 
+3

ठीक समाधान, बुरा सवाल :-) कहीं भी आपके प्रश्न में आपने समझाया कि आप वास्तव में क्या करने की कोशिश कर रहे थे। –

27

तुम सिर्फ अपने क्षेत्र को साफ करना चाहते हैं, वहाँ एक नया क्षेत्र परिभाषित करने की आवश्यकता है, तो आप ऐसा कर सकते हैं कि कैसे मैं इसे हल है प्रपत्र के clean_username विधि

class RegisterForm(forms.Form): 
    username = forms.CharField(max_length=30, min_length=4) 
    ... 
    ... 

    def clean_username(self): 
    username = self.cleaned_data['username'] 
    try: 
     user = User.objects.get(username=username) 
    except User.DoesNotExist: 
     return username 
    raise forms.ValidationError(u'%s already exists' % username) 

    def clean(self): 
    # Here you'd perform the password check 
    ... 

में तुम भी Django में उपयोगकर्ता पंजीकरण के लिए django-registration विचार कर सकते हैं, यह एक प्लगेबल एप्लिकेशन है, जो आप के लिए सभी उपयोगकर्ता सत्यापन, निर्माण और स्थापना संभाल लेंगे में इस बात का ख्याल रखता है।

नए फ़िरल्ड निर्माण के लिए, आपके फ़ील्ड की क्लीन() विधि को एक साफ मूल्य वापस करना चाहिए, न कि इसे प्रिंट करें।

class MyField(forms.CharField): 
    def clean(self, value): 
    # perform cleaning 
    return value 
संबंधित मुद्दे