Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 名称错误位于/system/invn/create name';名称';未在modelForm中定义_Python_Django_Django Forms - Fatal编程技术网

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)
,但在相同的函数中,您从未定义过
名称
序列号
、和
描述
。那些只存在于你的
表格中
。我不太明白你的问题。