I’m aware that there is many post like this, but can you spot the typo or error in my code?
I’m adding custom classes to my forms but when I inspect the element on the web page there are none. The same goes for placeholder.
Code:
Views.py:
def render_main(request): form = AuthorForm() context = { 'form' : form } return render(request,'nglib/search.html', context)
Template file:
{% csrf_token %} <div class="col-6"> {{form.name}} </div> <div class="col-6"> {{form.surname}} </div>
Forms.py:
from django.core.exceptions import ValidationError from django.forms import ModelForm from .models import SearchStats from django import forms import re def isStandardized(value): if not re.compile(r'^[a-zA-Z ]+$').match(value): raise ValidationError('Enter only english characters') return True class AuthorForm(ModelForm): name = forms.CharField(validators=[isStandardized]) surname = forms.CharField(validators=[isStandardized]) class Meta: model = SearchStats fields = ['name', 'surname', 'author_id', 'amount'] widgets = { 'name': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Name of an author'}), 'surname': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Surname of an author'}), 'author_id': forms.TextInput(attrs={'type':'hidden'}), 'amount': forms.TextInput(attrs={'type':'hidden'}) }
Advertisement
Answer
I think, you already specified the fields name
and surname
in the class itself, so you should use inline widgets not Meta widgets, as they are used for overriding default widgets, so:
class AuthorForm(ModelForm): name = forms.CharField(validators=[isStandardized],widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Name of an author'})) surname = forms.CharField(validators=[isStandardized],widget=forms.TextInput(attrs={'class':'form-control','placeholder':'surname of an author' })) class Meta: model = SearchStats fields = ['name', 'surname', 'author_id', 'amount'] widgets = { 'author_id': forms.TextInput(attrs={'type':'hidden'}), 'amount': forms.TextInput(attrs={'type':'hidden'}) }