Django在Forms中设置初始数据

时间:2017-11-22 16:57:57

标签: django forms django-forms django-views

我是Django的新手,请说我有一个跟随表单的观点

class DepartmentCreateView(LoginRequiredMixin,CreateView):
    form_class = DepartmentForm
    template_name = os.path.join(TEMPLATE_FOLDER, "create/index.html")

    def get_success_url(self):
        position_id = self.kwargs.get('position_id')
        return reverse_lazy('departments_list', kwargs = { 'college_id' : 
        college_id })


    def get_initial(self):
        initial = super(DepartmentCreateView, self).get_initial()
        initial.update({ 'college' : self.kwargs.get('college_id'), 
        'code' : 1 })
         return initial

我的表单看起来像

class DepartmentForm(forms.ModelForm):
    class Meta:
        model = Department
        fields = ('name', 'college', 'code')

当我显示表单时,我正在使用get_initial()为某些字段(大学)设置一些默认值,它按预期工作,但是当我提交表单时,如果表单无效(例如代码是必需的但是值是null)它在代码字段中显示预期的错误消息,但是表单无法再次将默认值设置为大学。

我在这里犯了什么错误?

2 个答案:

答案 0 :(得分:0)

您可以对Django Docs中的每个字段使用initial= your_value。 这应该是你的形式。

OR

您可以在初始化表单时填充键值对,例如initial= {'your_key', your_value}

答案 1 :(得分:0)

您可以覆盖get_form以将输入值设置为初始值

def get_form(self, form_class=None):
    form = super(CreatePost, self).get_form(form_class)
    form.fields['your_input'].widget.attrs.update({'value': 'new_value'})
    return form