我正在使用Django的ModelForms。我在文本输入上有占位符,我希望占位符在错误时更改(以指示输入内部的错误,而不是外部)。我还没有找到一种方法来覆盖小部件的模板。我怎么能做到这一点?
class BusinessForm(ModelForm):
color = forms.ChoiceField(choices=Business.colors)
category = forms.ModelChoiceField(
queryset=BusinessCategory.objects.all(),
to_field_name='id',
empty_label='Select Business category'
)
image = forms.ImageField(widget=ImageInput(), required=False)
class Meta:
model = Business
fields = ['name', 'strapline', 'story', 'category', 'color',
'address', 'secondary_address', 'city', 'county', 'postcode',
'phone_number', 'email', 'website', 'image']
widgets = {
'name': forms.TextInput(attrs={'placeholder': 'Business name * Required'}),
'strapline': forms.TextInput(attrs={'placeholder': 'Business strapline'}),
'story': forms.Textarea(attrs={'placeholder': 'Your business story'}),
'address': forms.TextInput(attrs={'placeholder': 'Address 1'}),
'secondary_address': forms.TextInput(attrs={'placeholder': 'Address 2'}),
'city': forms.TextInput(attrs={'placeholder': 'Town/City'}),
'county': forms.TextInput(attrs={'placeholder': 'Country'}),
#'postcode': forms.TextInput(attrs={'placeholder': 'Postcode*', 'ng-blur': 'validatePostCode()', 'ng-model': 'postcode'}),
'postcode': forms.TextInput(attrs={'placeholder': 'Postcode * Required'}),
'phone_number': forms.TextInput(attrs={'placeholder': 'Business phone number * Required'}),
'email': forms.EmailInput(attrs={'placeholder': 'Business email * Required'}),
'website': forms.TextInput(attrs={'placeholder': 'Enter business website e.g. www.mybusiness.co.uk'}),
}
labels = {
'name': 'Business Name',
'strapline': 'Business Strapline',
'story': 'Your Business Story',
'category': 'Select Business category',
'address': 'Address 1',
'secondary_address': 'Address 2',
'city': 'Town/City',
'county': 'Country',
'postcode': 'Postcode*',
'phone_number': 'Business phone number*',
'email': 'Business email*',
'website': 'Business Website',
}
答案 0 :(得分:2)
您可以将attrs
dict传递给窗口小部件,如果您使用常规窗体渲染,则会呈现这些:
class MyForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={
'placeholder': _('This is a required value')
})
如果您希望只显示错误,那么您可能可以在clean_name
方法中进行此设置,尽管它通常不是您所需要的#&# 39; d见clean_*
方法。
或者,您可以在模板中执行此操作。请查看Django Sniplates以获得构建django模板的更好方法。
答案 1 :(得分:2)
不要那样做。
仅当输入值为空(空)时,才会显示占位符。它可能适用于所需的输入,但不适用于值为的输入。在这种情况下,占位符将消失,您无法用错误的输入警告用户。
这就是大多数网站在输入字段下/上/下显示错误的原因。
因此,如果您仍然倾向于将错误放入空输入的占位符中,则必须使用Javascript(例如使用jQuery库)。
例如,如果用户离开输入(模糊效果),您将检查是否需要输入。如果是,并且输入为空,则将错误放入占位符属性。