Forma Django – etiqueta de conjunto

Tengo una forma que hereda de 2 otras formas. En mi formulario, quiero cambiar la etiqueta de un campo que se definió en uno de los formularios principales. ¿Alguien sabe cómo se puede hacer esto?

Estoy intentando hacerlo en mi __init__ , pero __init__ un error que dice que el objeto “RegistrationFormTOS” no tiene ningún atributo “correo electrónico”. ¿Alguien sabe cómo puedo hacer esto?

Gracias.

Aquí está mi código de formulario:

 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 

Deberías usar:

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

Tenga en cuenta que primero debe utilizar la súper llamada.

Aquí hay un ejemplo tomado de Anular los campos predeterminados :

 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."), }, } 

Puede acceder a los campos de un formulario a través de los ‘campos’ dict:

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

Esto es para que no tenga que preocuparse por los campos de formulario que tienen conflictos de nombre con los métodos de clase de formulario. (De lo contrario, no podría tener un campo llamado ‘limpio’ o ‘is_valid’). Definir los campos directamente en el cuerpo de la clase es solo una conveniencia.

Puede definir la label como un atributo de campo cuando define el formulario.

 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', ) 

No funciona para la herencia del modelo, pero puede establecer la etiqueta directamente en el modelo.

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