You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

预填充Django 2表单报错:‘str’对象没有‘get’属性

解决Django UpdateProfile表单预填充及提交报错问题

嘿,我瞅到你代码里的问题啦!最后一行render函数里的args是个未定义的变量,这绝对是触发那个widget相关错误的元凶!

先给你修正后的完整视图代码:

def update_profile(request):
    if request.method == 'POST':
        form = UpdateProfile(request.POST, instance=request.user.userprofile)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UpdateProfile(instance=request.user.userprofile)
    # 这里把未定义的args改成传递form的上下文字典
    return render(request, 'update_profile.html', {'form': form})

为啥之前会报错?

Django的render函数第三个参数需要是上下文字典,用来把视图里的变量传递给模板。你之前写的args根本没定义,导致模板里渲染表单时拿不到form实例,表单组件(widget)没法正确读取数据,才触发了value_from_datadict的错误。

额外要确认的几点:

  • 确保你的UpdateProfile表单是正确继承ModelForm并关联了UserProfile模型的,比如:
from django import forms
from .models import UserProfile

class UpdateProfile(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['bio', 'avatar', 'location']  # 换成你的实际字段
  • 要保证request.user.userprofile确实存在——比如你有没有用信号在创建User时自动生成关联的UserProfile?不然GET请求初始化表单时会直接报错。
  • 模板update_profile.html里要正确渲染表单,别漏了CSRF令牌:
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">更新资料</button>
</form>

内容的提问来源于stack exchange,提问作者DarkCoderRises

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:10