【问题标题】:Django form not savingDjango表单不保存
【发布时间】:2014-05-19 04:34:03
【问题描述】:

我正在尝试使用与用于创建用户帐户的表单相同的表单来更新自定义用户的字段。用户帐户工作正常并且 form.is_valid() 返回 true 导致保存和重定向但是在下面的代码中重定向永远不会发生,并且在使用提交按钮时不会保存表单上更新的字段。我觉得我错过了一些简单的东西,但就是看不到它。下面的视图是否有理由不保存表单上更新的数据?

谢谢

def update_user(request):
    user = Customer.objects.get(pk=request.user.id)
    form = CustomerForm(instance=user)
    if request.method == 'POST':
        form = CustomerForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('success.html')

    args = {}
    args.update(csrf(request))
    args['form'] = form
    return render_to_response('update.html', args)

【问题讨论】:

    标签: django forms


    【解决方案1】:

    您是否尝试在表单无效时打印 form._errors?这是调试此类问题的好方法。这里有固定的代码:

    def update_user(request):
        user = Customer.objects.get(pk=request.user.id)
        form = CustomerForm(instance=user)
        if request.method == 'POST':
            form = CustomerForm(request.POST, instance=user) # HERE
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('success.html')
    
        args = {}
        args.update(csrf(request))
        args['form'] = form
        return render_to_response('update.html', args)
    

    此外,您可以替换此代码:

    form = CustomerForm(instance=user)
    if request.method == 'POST':
        form = CustomerForm(request.POST, instance=user) # HERE
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('success.html')
    

    使用这个(工作方式相同):

    form = CustomerForm(request.POST or None, instance=user)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('success.html')
    

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 2014-02-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2021-03-14
      相关资源
      最近更新 更多