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

Django视图使用request.POST.get时出现NameError: name 'name'未定义

解决NameError: name 'name' is not defined的问题

嘿,这个错误的根源很明确,咱们一步步来修复:

1. 先搞定最直接的错误:fields参数的写法

你在views.py里写了fields = (name,),这里的name被Python当成了一个未定义的变量,所以才抛出NameError。Django的CreateView要求fields是字段名称的字符串组成的元组/列表,必须改成带引号的字符串形式:

class Seller(CreateView):
    fields = ('name',)  # 把name改成带引号的字符串
    model = models.Seller  # 注意:你的models.py里定义的是Employee,这里大概率是笔误,要和模型类名保持一致
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.name = self.request.POST.get("name", "") + "additional string"
        self.object.save()
        return super().form_valid(form)  # 这里可以简化成super(),不用指定ModelFormMixin

2. 修正模型类名的不一致问题

你的models.py里定义的是Employee类,但views.py里写的是model = models.Seller,这肯定会引发后续问题。要么把models里的类改成Seller,要么把views里的model改成models.Employee,必须保持两者完全一致。

3. 优化form_valid方法(可选但推荐)

直接从request.POST取数据不如用表单清洗后的数据安全,建议换成form.cleaned_data——它已经经过Django的表单验证和清洗,能避免非法数据的问题:

def form_valid(self, form):
    self.object = form.save(commit=False)
    # 使用清洗后的数据更安全可靠
    self.object.name = form.cleaned_data.get("name", "") + "additional string"
    self.object.save()
    return super().form_valid(form)

这样改完,你的NameError应该就消失了,同时也能避免后续可能出现的模型不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:19