以Django形式访问表单属性

时间:2014-08-10 10:24:25

标签: python django django-forms

我试图让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'。 那里有什么不对?

2 个答案:

答案 0 :(得分:2)

这是因为self.cleaned_data不是对象而是字典。例如。您无法通过。(点)表示法访问它。

您必须从dict中选择它:

title = data['title']

或更好的方式:

title = data.get('title',None)

将尝试从字典中获取标题,如果不成功,则会将设置为标题。

答案 1 :(得分:1)

您需要将dict.title更改为dict['title']