Django 1.8 ModelForm request.POST取代实例

时间:2015-02-22 18:55:11

标签: python django django-forms

所以我正在使用Django 1.8 Alpha代码库,想看看是否有其他人遇到这个有趣的问题。我有一个ModelForm:

class ChildForm(forms.ModelForm):
    class Meta:
        model = Child
        fields = ('first_name', 'last_name', 'gender', 'birthday', 'avatar')

我也有我的观点:

@login_required
def edit_child(request, id):
    """Edit a child"""
    child = get_object_or_404(Child, pk=id)

    if not child.parent == request.user:
        raise Http404()

    form = ChildForm(request.POST, request.FILES, instance=child)

    if request.method == 'POST' and form.is_valid():
        form.save()
        return redirect('dashboard')

    context = {
        'child': child,
        'form': form
    }

    return render(request, 'edit_child.html', context)

当我在模板中渲染表单时,一切正常,减去一件事。初始值为空。在过去的Django版本中,同时使用request.POSTinstance=child允许实例通过并填充表单。但由于一些奇怪的原因,它似乎接受request.POST作为初始状态而不是实例。在调试中:

  • 表单已绑定
  • 表单中的初始数据设置正确
  • 实例设置正确

唯一的问题是渲染。为了显示,我的模板使用crispy_forms进行表单渲染:

<form role="form" method="post" action="{{ child.get_edit_url }}" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form|crispy }}
    <button type="submit" class="btn btn-default">Save</button>
</form>

之前有人看过这个或看到我明显做错的事情吗?

1 个答案:

答案 0 :(得分:2)

所以事实证明,如果为 BOTH 文件返回dict并发布数据,我需要明确设置None

form = ChildForm(request.POST or None, request.FILES or None, instance=child)

继续。