Python 名称错误位于/system/invn/create name';名称';未在modelForm中定义
我试图用Python 名称错误位于/system/invn/create name';名称';未在modelForm中定义,python,django,django-forms,Python,Django,Django Forms,我试图用ModelForm创建一个表单,并将其保存到数据库中。但是我犯了一个错误 这是我的模特 class Inventory(models.Model): name = models.CharField(max_length=255) sn = models.DecimalField(max_digits=20, decimal_places=0) desc = models.TextField(blank=True, null=True, default='Tidak
ModelForm
创建一个表单,并将其保存到数据库中。但是我犯了一个错误
这是我的模特
class Inventory(models.Model):
name = models.CharField(max_length=255)
sn = models.DecimalField(max_digits=20, decimal_places=0)
desc = models.TextField(blank=True, null=True, default='Tidak ada deskripsi')
这里是我的forms.py
class InventoryForm(forms.ModelForm):
name = forms.CharField(max_length=255)
sn = forms.DecimalField(max_digits=20, decimal_places=0)
desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Inventory
fields = ('name', 'sn', 'desc',)
class InventoryCreateView(TemplateView):
template_name ='system/inventory_form.html'
def get(self, request):
form = InventoryForm()
return render(request, self.template_name, {'form': form})
def post(self, request):
form = InventoryForm(request.POST)
if form.is_valid():
form.save()
args = {'form': form, 'name': name, 'sn': sn, 'desc': desc}
return render(request, self.template_name, args)
这里是我的视图.py
class InventoryForm(forms.ModelForm):
name = forms.CharField(max_length=255)
sn = forms.DecimalField(max_digits=20, decimal_places=0)
desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Inventory
fields = ('name', 'sn', 'desc',)
class InventoryCreateView(TemplateView):
template_name ='system/inventory_form.html'
def get(self, request):
form = InventoryForm()
return render(request, self.template_name, {'form': form})
def post(self, request):
form = InventoryForm(request.POST)
if form.is_valid():
form.save()
args = {'form': form, 'name': name, 'sn': sn, 'desc': desc}
return render(request, self.template_name, args)
它在/system/invn/create name'name'处所说的name错误没有从args={'form':form'name':name'sn':sn'desc':desc}定义为modelForm
这里漏了什么 这是导致错误的行:
args = {'form': form, 'name': name, 'sn': sn, 'desc': desc}
name
、sn
和desc
在这里没有定义
因此,您需要获取保存的对象并访问其属性:
if form.is_valid():
inventory = form.save()
args = {'form': form, 'name': inventory.name, 'sn': inventory.sn, 'desc': inventory.desc}
…但当表单无效时,此操作将失败。因此,您可能需要添加一些代码来处理该情况。您正试图直接从post
方法从模型表单
获取名称
字段
您的post
方法没有名为name
的变量。请注意,您已经将您的表单
作为参数传递,该参数可用于模板
在模板中,可以使用作为上下文传递的表单
arg中的值。但是,如果您确实希望将它们作为上下文传递到参数中,您可以从表单中传递它们。清理的\u数据
,因为它在中是有效的()
def post(self, request):
form = InventoryForm(request.POST)
if form.is_valid():
form.save()
args = {
'form': form,
'name': form.cleaned_data.get('name'),
'sn': form.cleaned_data.get('sn'),
'desc': form.cleaned_data.get('desc')
}
return render(request, self.template_name, args)
+1关于Ashish Acharya的回答:
…但当表单无效时,此操作将失败。因此,您可能需要添加一些代码来处理这种情况
啊,谢谢。我想是因为'form':form,
name也'name':name
。但这是错误的。不,您确实将表单定义为表单=库存表单(request.POST)
,但在相同的函数中,您从未定义过名称
、序列号
、和描述
。那些只存在于你的表格中
。我不太明白你的问题。