我试图让django的通用FormView函数起作用。但无法弄清楚什么是问题。
这是我的表格:
class JobCreateForm(forms.Form):
title = forms.CharField(max_length=200)
description = forms.CharField(widget=forms.Textarea)
def save(self, user):
data = self.cleaned_data
company = user.get_profile().get_company()
# create job
job = Job(title=data.title, description=data.description, company=company, user=user)
job.save()
这是我的观点:
class JobCreate(FormView):
form_class = JobCreateForm
template_name = "jobs/create.html"
def form_valid(self, form):
form.save(self.request.user)
return super(JobCreate, self).form_valid(form)
这是我的模板:
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create" />
</form>
当我尝试执行form.save(...)时,出现错误:'dict' object has no attribute 'title'
。
那里有什么不对?
答案 0 :(得分:2)
这是因为self.cleaned_data不是对象而是字典。例如。您无法通过。(点)表示法访问它。
您必须从dict中选择它:
title = data['title']
或更好的方式:
title = data.get('title',None)
将尝试从字典中获取标题,如果不成功,则会将无设置为标题。
答案 1 :(得分:1)
您需要将dict.title
更改为dict['title']