2014-02-11 56 views
0

我有一个HTML表单,其中包含许多表单元素,它们在提交时发布到服务器。 在后端,一旦验证通过,我试图将整个POST字典传递给模型并保存。像这样:django排除字典中不是模型属性的字段

self.form_data = {key:value for key,value in self.request.POST.iteritems() } 
ApplicationModel(**self.form_data).save() 

但是,表单中还有一些额外的项目在模型中没有关联的属性。所以我最终在一个错误说:

'csrf_token' is an invalid keyword argument for this function 

我必须在传递到模型之前显式从表单字典中删除这些项目。

有没有办法抑制这个错误&忽略字典中没有映射到模型属性的所有项目?

+0

我不认为这是一个好主意。这是明确的一种方式 - 只发送模型绝对需要的信息 – karthikr

+0

@karthikr它必须从每个表单对象中删除csrf_token。我仍然很好奇,如何解决这个问题? –

+0

'{key:键的值,self.request.POST.iteritems()中的值如果键不在('csrf_token',)}' – karthikr

回答

1

为您的模型创建一个ModelForm,并让它处理该逻辑。

这是ModelForm的是,这是你应该如何来解决这个问题:

# forms.py 
from django.forms import ModelForm 
from myapp.models import Article 


class ApplicationForm(ModelForm): 
    class Meta: 
     model = Application 


# views.py 

def my_view(request): 
    if request.method == "POST": 
     form = ApplicationForm(request.POSt) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect("/thanks/") 
    form = ApplicationForm() 
    return render(request, 'template.html', {'form': form}) 
相关问题