仅添加动态字段渲染文本输入

时间:2018-09-23 06:59:06

标签: django forms dynamic widget field

我正在通过表单类的初始化覆盖以Django形式创建动态字段:

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 。有这种现象的解释吗?请帮助我是Django的新手

0 个答案:

没有答案