作为隐藏输入的Django多值字段未绑定

作为隐藏输入的Django多值字段未绑定,django,Django,我有一个模型表单来创建/更新课程对象。表单中的一个字段是“教员”,这是一个多值字段,与课程有多对多关系 创建和更新课程(以及相关教员)工作正常,但现在我想根据用户进行更新时的某些条件(称为“更新”)将教员设置为隐藏字段。我在CourseForm的init方法中处理这个问题。但当我将小部件设置为forms.HiddenInput()并尝试更新课程时,我看到一个验证错误:“(隐藏字段)输入值列表”。即使在创建课程时分配了教员,但当我去更新课程时,表单实例认为教员是空的。这似乎是多值字段特有的,因为此

我有一个模型表单来创建/更新课程对象。表单中的一个字段是“教员”,这是一个多值字段,与课程有多对多关系

创建和更新课程(以及相关教员)工作正常,但现在我想根据用户进行更新时的某些条件(称为“更新”)将教员设置为隐藏字段。我在CourseForm的init方法中处理这个问题。但当我将小部件设置为forms.HiddenInput()并尝试更新课程时,我看到一个验证错误:“(隐藏字段)输入值列表”。即使在创建课程时分配了教员,但当我去更新课程时,表单实例认为教员是空的。这似乎是多值字段特有的,因为此过程适用于整数字段

我是否需要以某种方式设置教员字段的值?如果有帮助,我将在下面显示相关代码。多谢各位

models.py forms.py views.py
这是因为faculty对象未设置为null=True@karthikr,我不确定我是否明白。你是在谈论课程目标中的教员领域吗?我没有设置null=True,因为我不想在不指定教员的情况下创建课程。当错误发生时,即当用户正在更新现有课程时,该课程确实有教员。不允许用户编辑教员,但允许编辑其他字段(如term_num)。因此,我希望faculty保留其原始值,在更新表单上对用户隐藏。在这种情况下,我建议您使用一个包含
faculty
作为排除字段的编辑表单,而不是将其作为隐藏输入。好的,谢谢,我将尝试创建一个单独的编辑表单,或者创建一个继承,不用把逻辑放在init方法中,创建一个带有自己字段集的单独编辑表单可以很好地工作,避免了最初的错误,并且节省了大量代码。谢谢你的指点。
 class Faculty(models.Model):
    last_name = models.CharField(max_length=20)

 class Course(models.Model):
    faculty = models.ManyToManyField(Faculty)
    term_num = models.PositiveSmallIntegerField()
class CourseForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = ['term_num', 'faculty' ]

    def __init__(self, *args, **kwargs):
        updating = kwargs.pop('updating', False)
        super(CourseForm, self).__init__(*args, **kwargs)
        if updating: 
            self.fields['faculty'].widget = forms.HiddenInput()
class CourseUpdate(UpdateView):
    model = Course
    template_name = 'mcadb/course_form.html'
    form_class = CourseForm

    def get_form_kwargs(self, **kwargs):
        # pass data to form
        kwargs = super(CourseUpdate, self).get_form_kwargs(**kwargs)
        kwargs['updating'] = True
        return kwargs