Я создаю динамические поля в формах django путем переопределения init класса формы:
forms.py
class LearnerEventsLogForm(forms.Form):
def __init__(self, *args, **kwargs):
super(LearnerEventsLogForm, self).__init__(*args, **kwargs)
self.fields["division"] = forms.ChoiceField(required=True ,choices=[])
self.fields["division"].widget = forms.Select
self.fields["lin"] = forms.CharField(required=True)
self.fields["remarks"] = forms.CharField()
self.fields["remarks"].widget = forms.Textarea
На мой взгляд:
class LearnerEventsLogCreate(FormView):
model = LearnerEventsLog
template_name = 'learners/learner_events_log.html'
form_class=LearnerEventsLogForm
success_url = reverse_lazy('learner_events_log_list')
def form_valid(self, form):
learner_events_log=form.save(commit=False)
learner_events_log.log_id=self.request.user.id
learner_events_log.ip=self.getRemoteIp(self.request)
learner_events_log.save()
return CreateView.form_valid(self, form)
def form_invalid(self, form):
return self.render_to_response(self.get_context_data(form=form))
В моем шаблоне:
{% extends 'base.html' %}{% load static %}
{% load widget_tweaks %}
<form id="learnerClassForm" method="post">
{% csrf_token %}
{% for field in form.visible_fields %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field | add_class:'form-control' }}
</div>
{% endfor %}
<div class="form-group">
<button type="submit" class="btn btn-success">
<span class="glyphicon glyphicon-ok"></span> Save
</button>
<a href="{% url 'home' %}" class="btn btn-default">Cancel</a>
</div>
</form>
К моему удивлению все поля виджета имеют тип textinput .Есть ли объяснение этому поведению?Пожалуйста, помогите я новичок в Джанго