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
相关产品推荐
相关产品推荐

