Django表单MultipleChoiceField在保存时恢复原值

3 投票
1 回答
1284 浏览
提问于 2025-04-15 20:18

我写了一个自定义的多选字段。现在一切都正常,但当我提交表单时,选中的值又回到了最初的选项,尽管表单验证是通过的。

我的代码大概是这样的:

class ProgrammeField(forms.MultipleChoiceField):
    widget = widgets.SelectMultiple

class ProgrammeForm(forms.Form):
    programmes = ProgrammeField(required=False)

    def __init__(self, user, *args, **kwargs):
        self.fields['programmes'].choices = Mymodel.objects.all()
        self.fields['programmes'].initial = Mymodel.objects.filter(created=user)

view.py
if request.method == 'POST':
    form = ProgrammeForm(user=request.user, data=request.POST)
    if form.is_valid():
        form.save()
form = ProgrammeForm(request.user)

return render_to_response(form.html', {'form': form }) 

我没有包含其他字段等内容,但这基本上就是我遇到问题的代码。有没有人知道怎么才能在表单提交后显示新的值,或者为什么它又回到了原来的值?

谢谢!

1 个回答

3

你总是传递一个没有绑定的表单实例,试试这个:

view.py

if request.method == 'POST':
    form = ProgrammeForm(user=request.user, data=request.POST)
    if form.is_valid():
        form.save()
else: ##this is the changge
    form = ProgrammeForm(request.user)
return render_to_response('form.html', {'form': form }) 

撰写回答