所以我正在使用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.POST
和instance=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>
之前有人看过这个或看到我明显做错的事情吗?
答案 0 :(得分:2)
所以事实证明,如果为 BOTH 文件返回dict并发布数据,我需要明确设置None
:
form = ChildForm(request.POST or None, request.FILES or None, instance=child)
继续。