Ich habe ein Formular, das von 2 anderen Formularen erbt. In meinem Formular möchte ich die Bezeichnung eines Felds ändern, das in einem der übergeordneten Formulare definiert wurde. Weiß jemand, wie das gemacht werden kann?
Ich versuche es in meinem zu tun __init__
, aber es wird ein Fehler ausgegeben, der besagt, dass das Objekt '' RegistrationFormTOS '' kein Attribut 'email' hat. Weiß jemand, wie ich das machen kann?
Vielen Dank.
Hier ist mein Formularcode:
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
python
django
inheritance
django-forms
TehOne
quelle
quelle
Sie können
label
ein Feldattribut festlegen, wenn Sie ein Formular definieren.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', )
quelle
the label of a field that was defined in one of the parent forms
- das übergeordnete Formular ist das wichtige Bit.__init__() got an unexpected keyword argument 'label'
Sie greifen auf Felder in einem Formular über das Diktat "Felder" zu:
self.fields['email'].label = "New Email Label"
So müssen Sie sich keine Sorgen machen, dass Formularfelder Namenskonflikte mit den Formularklassenmethoden aufweisen. (Andernfalls könnten Sie kein Feld mit dem Namen 'clean' oder 'is_valid' haben.) Das Definieren der Felder direkt im Klassenkörper ist meist nur eine Annehmlichkeit.
quelle
Es funktioniert nicht für die Modellvererbung, aber Sie können die Beschriftung direkt im Modell festlegen
email = models.EmailField("E-Mail Address") email_confirmation = models.EmailField("Please repeat")
quelle