Как изменить тип ввода поля формы в django forms?
У меня есть класс формы в моем файле form.py, где я инициирую свойства полей формы. Я хочу изменить поле 'Description' с поля ввода на поле textarea высотой 5 строк. Также я хочу изменить поле 'Deadline' на поле ввода даты, потому что в данный момент это текстовое поле ввода.
class JobPost_form(ModelForm):
class Meta:
model = Job_post
fields = "__all__"
def __init__(self, *args, **kwargs):
self.fields['Job_role'].widget.attrs.update(
{'class': 'form-control Password2', 'id': 'form3Example1c', 'placeholder': 'Job role'})
self.fields['Company'].widget.attrs.update(
{'class': 'form-control', 'id': 'form3Example1c', 'placeholder': 'Company'})
self.fields['Deadline'].widget.attrs.update(
{'class': 'form-control', 'id': 'form3Example1c', 'placeholder': 'YYYY-MM-DD HH:MM:SS'})
self.fields['Description'].widget.attrs.update(
{'class': 'form-control', 'id': 'form3Example1c', 'placeholder': 'Description'})
Я думаю, что в переданном вами коде не хватает табуляции, так как мета и init будут внутри класса: JobPost_form. Что касается маркировки поля описания как textarea, вы должны сделать следующее:
class JobPost_form(ModelForm):
description = forms.CharField(widget=forms.TextInput(attrs={"class": "form-control"}))
class Meta:
model = Job_post
fields = "__all__"
def __init__(self, *args, **kwargs):
...
Вы можете достичь этих вещей, используя wigets(attrs="{}"), который предоставляется django в forms api
models.py
class DemoClass(models.Model):
description = models.TextField()
deadline = models.DateField()
form.py
class DemoForm(forms.ModelForm):
class Meta:
model = DemoClass
fields = "__all__"
widgets={
'description':forms.Textarea(attrs={"rows":"4", "cols":"50"}),
'deadline':forms.TextInput(attrs={'type':'date'}),
--------------- OR -------------------------------
'deadline':forms.DateInput(attrs={'type':'date'}),
}
HTML
{% block body %}
<div class="container">
<div class="row">
<div class="col-lg-12">
{{form.as_p}}
</div>
</div>
</div>
{% endblock body %}