2009-03-12 18 views
51

मेरे पास एक ऐसा फॉर्म है जो 2 अन्य रूपों से प्राप्त होता है। मेरे रूप में, मैं उस क्षेत्र के लेबल को बदलना चाहता हूं जिसे मूल रूपों में से एक में परिभाषित किया गया था। क्या कोई जानता है कि यह कैसे किया जा सकता है?Django फॉर्म - सेट लेबल

मैं इसे अपने __init__ में करने की कोशिश कर रहा हूं, लेकिन यह एक त्रुटि कहता है कि "पंजीकरणफॉर्मटॉस" ऑब्जेक्ट में कोई विशेषता 'ईमेल' नहीं है। क्या कोई जानता है मैं ऐसा कैसे कर सकता हूँ?

धन्यवाद।

यहाँ मेरी प्रपत्र कोड है:

from django import forms 
from django.utils.translation import ugettext_lazy as _ 
from registration.forms import RegistrationFormUniqueEmail 
from registration.forms import RegistrationFormTermsOfService 

attrs_dict = { 'class': 'required' } 

class RegistrationFormTOS(RegistrationFormUniqueEmail, RegistrationFormTermsOfService): 
    """ 
    Subclass of ``RegistrationForm`` which adds a required checkbox 
    for agreeing to a site's Terms of Service. 

    """ 
    email2 = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=75)), label=_(u'verify email address')) 

    def __init__(self, *args, **kwargs): 
     self.email.label = "New Email Label" 
     super(RegistrationFormTOS, self).__init__(*args, **kwargs) 

    def clean_email2(self): 
     """ 
     Verifiy that the values entered into the two email fields 
     match. 
     """ 
     if 'email' in self.cleaned_data and 'email2' in self.cleaned_data: 
      if self.cleaned_data['email'] != self.cleaned_data['email2']: 
       raise forms.ValidationError(_(u'You must type the same email each time')) 
     return self.cleaned_data 

उत्तर

104

आप उपयोग करना चाहिए:

def __init__(self, *args, **kwargs): 
    super(RegistrationFormTOS, self).__init__(*args, **kwargs) 
    self.fields['email'].label = "New Email Label" 

नोट पहले आप सुपर कॉल का उपयोग करना चाहिए।

7
एक रूप में

आप पहुँच फ़ील्ड 'फ़ील्ड' dict के माध्यम से:

self.fields['email'].label = "New Email Label" 

इतना है कि आप प्रपत्र फ़ील्ड्स बारे में चिंता करने की जरूरत नहीं है फॉर्म क्लास विधियों के साथ नाम संघर्ष। (अन्यथा आपके पास 'साफ' या 'is_valid' नामक फ़ील्ड नहीं हो सका) कक्षा वर्ग में सीधे फ़ील्ड को परिभाषित करना ज्यादातर एक सुविधा है।

1

यह मॉडल विरासत के लिए काम नहीं करते हैं, लेकिन आप मॉडल में सीधे लेबल सेट कर सकते हैं

email = models.EmailField("E-Mail Address") 
email_confirmation = models.EmailField("Please repeat") 
4

आप क्षेत्र की विशेषता के रूप label सेट कर सकते हैं जब आप प्रपत्र परिभाषित करते हैं।

class GiftCardForm(forms.ModelForm): 
    card_name = forms.CharField(max_length=100, label="Cardholder Name") 
    card_number = forms.CharField(max_length=50, label="Card Number") 
    card_code = forms.CharField(max_length=20, label="Security Code") 
    card_expirate_time = forms.CharField(max_length=100, label="Expiration (MM/YYYY)") 

    class Meta: 
     model = models.GiftCard 
     exclude = ('price',) 
+1

इस जवाब के साथ समस्या यह है कि यह स्पष्ट नहीं होता 'कैसे बदलने के लिए एक क्षेत्र के लेबल है कि एक के रूप में परिभाषित किया गया है माता-पिता के रूपों का - माता-पिता का रूप महत्वपूर्ण है। – jamesc

+0

यह मेरे लिए काम नहीं करता ... '__init __() को एक अप्रत्याशित कीवर्ड तर्क 'लेबल' मिला – User

+0

व्यवस्थापक फॉर्म में काम नहीं किया! – Raptor

22

यहाँ एक उदाहरण Overriding the default fields से लिया है:

from django.utils.translation import ugettext_lazy as _ 

class AuthorForm(ModelForm): 
    class Meta: 
     model = Author 
     fields = ('name', 'title', 'birth_date') 
     labels = { 
      'name': _('Writer'), 
     } 
     help_texts = { 
      'name': _('Some useful help text.'), 
     } 
     error_messages = { 
      'name': { 
       'max_length': _("This writer's name is too long."), 
      }, 
     } 
+0

django टेम्पलेट में इसका उपयोग कैसे करें – user2413621

+2

यह केवल मॉडलफॉर्म के लिए काम करता है। फॉर्म नहीं – Elwin

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