用于编辑UserProfile模型的表单中的空值会导致所有内容都为空

时间:2012-05-13 21:25:17

标签: python django django-models django-forms django-views

我基本上想要完成的是,当用户编辑他的个人资料时,空白字段会导致所有内容被覆盖。

例如:

如果添加了名字并且用户想要更改它,则他不必重新填充整个表单,他必须更改的唯一字段是名字字段。当表单被提交时,其他空白字段会导致他们的模型字段为空。

这是我试过的:

def editUserprofile(request):
    rc = context_instance=RequestContext(request)
    u = request.user
    if request.method=='POST':
        form = UserProfileEdit(request.POST, request.FILES)
        if form.is_valid():
            u = UserProfile.objects.get(user=u)
            if 'avatar' in request.FILES :
                u.avatar = request.FILES['avatar']
            if 'first_name' in request.POST:
                u.first_name = form.cleaned_data['first_name']
            if 'last_name' in request.POST:
                u.last_name = form.cleaned_data['last_name']
            if 'email' in request.POST:
                u.email = form.cleaned_data['email']
            if 'country' in request.POST:    
                u.country = form.cleaned_data['country']
            if 'date_of_birth' in request.POST:
                u.date_of_birth = form.cleaned_data['date_of_birth']
            u.save()
            return HttpResponseRedirect(reverse('photocomp.apps.users.views.editUserprofile'))
    else:
        u = UserProfile.objects.get(user=u)
        form = UserProfileEdit()
    return render_to_response('users/editprofile.html',
                             {'form':form, 'u':u},
                             rc)

我是否可以在不编辑模型内容的情况下使空字段通过?

希望它不会让你如此混淆!

如果你想要更多细节请告诉我:)提前谢谢!

1 个答案:

答案 0 :(得分:1)

由于这是编辑表单,您应该考虑使用当前值预先填充字段。通过提交构造函数instance参数(如果您使用的是ModelForm),这很容易。这将使用正确的值预先填充值,用户可以更改他/她想要的任何值。

form = UserProfileEdit(instance=u)

Django doc link