Весь мой поиск дал результаты для «настраиваемых полей» в Django, что не то, что мне нужно, я пытаюсь настроить класс Field
. Единственный аналогичный вопрос не получил ответа.
Я создаю форму в Django, и я пытаюсь указать конкретный значок c появляться рядом с каждым полем ввода. ( См. Макет )
Например, я добавил нестандартный аргумент icon
при построении формы:
checkin.py
from django import forms
class CheckInForm(forms.Form):
last_name = forms.CharField(
icon="fa-id-card-o"
)
dob = forms.DateField(
icon="fa-calendar"
)
...
Я хотел бы получить доступ к этому новому аргументу icon
из моего шаблона:
checkin.html
<form action="" method="post">
{% csrf_token %}
<table>
{% for field in form %}
<label for="{{ field.name }}" class="col-4 col-form-label">
{{ field.label }}
</label>
<div class="col-8">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">
<i class="fa {{ field.icon }}"></i> <!--- icon argument --->
</div>
</div>
{{ field }}
</div>
</div>
{% endfor %}
</table>
<div class="form-group row">
<div class="offset-4 col-8">
<button name="submit" type="submit" class="btn btn-primary">Check In</button>
</div>
</div>
</form>
Когда я запускаю этот код, он Конечно, происходит сбой:
TypeError: init () получил неожиданный аргумент ключевого слова 'icon'
Попытка подхода
Это мне кажется, это хороший случай для расширения некоторых Python классов .
Оба CharField
и DateField
являются подклассами Django s Field
class , поэтому я подумал, что могу расширить его примерно так:
from django.forms import Field
class ExtendedField(Field):
icon = ""
Но вот где я застрял: как мне развернуть этот новый класс? Мой объект CheckInForm
является подклассом forms.Form
, который является подклассом BaseForm
, который, похоже, не создает никаких объектов Field
напрямую, поэтому я не уверен, как они связаны. Однако класс Field
- это , который сотни раз использовался в других местах. Должен ли я переопределить их все?
tl; dr : Есть ли более простой способ применить это простое изменение в классе Field
во всех местах, где оно используется?