我看到很多人已经遇到过这个错误,但我想要做的是具体的,其他问题的答案对我没有帮助。 我是Django的新手,我正在尝试创建一个带有名字,姓氏,电子邮件和密码字段的表单,并且在提交表单后,我希望所有这些都写在一个文件中。我没有User对象,我实际上并没有尝试创建一个登录页面,我只想看看如何将内容写入txt文件。
所以,我在urls.py中做到了这一点:
sysenter
然后在views.py中:
syscall
所以我在forms.py中有一个EmployeeForm:
url(r'^file/$', views.employee, name='employee')
和相关的html文件是: employee.html:
def employee(request):
if request.method == "POST":
form = EmployeeForm(request.POST)
if form.is_valid():
with open('employee.txt', 'w') as f:
myfile = File(f)
myfile.write('%s ... %s ... %s ... %s ' % form.first_name % form.last_name % form.email % form.password)
return render(request, 'blog/employee_thanks.html')
else:
form = EmployeeForm
return render(request, 'blog/employee.html', {'form': form})
和employee_thanks.html:
class EmployeeForm(forms.Form):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput())
最后,有问题的错误:
/ file /中的AttributeError 'EmployeeForm'对象没有属性'first_name' 请求方法:POST 请求网址:http://localhost:8000/file/ Django版本:1.10 异常类型:AttributeError 例外价值:
'EmployeeForm'对象没有属性'first_name'
我猜这个问题介于forms.py和views.py之间,但我不知道它可能是什么。 因为我这是一个爱好,如果问题愚蠢,请不要太苛刻。 在此先感谢:)
答案 0 :(得分:1)
form
对象实例不具有属性first_name
,last_name
等,因为它们是底层对象实例的属性。
相反,您可以像这样访问first_name:
form.cleaned_data.get("first_name")
您可以在{{3}}
上阅读更多内容答案 1 :(得分:1)
您的代码中存在一些错误。
首先,表单字段不是Form
实例的属性。使用form.is_valid()
进行验证后,您可以使用form.cleaned_data
字典访问字段,例如
form.cleaned_data['first_name']
或更安全:
form.cleaned_data.get('first_name', '')
如果表单中没有字段,将返回空字符串而不是引发异常。
第二个错误是字符串格式化语法错误:
myfile.write('%s ... %s ... %s ... %s ' % form.first_name % form.last_name % form.email % form.password)
应该是:
myfile.write('%s ... %s ... %s ... %s ' % (form.cleaned_data['first_name'], form.cleaned_data['last_name'], form.cleaned_data['email'], form.cleaned_data['password']))
应该使用要替换为字符串的值的元组。但是可以通过这样传递字典来简化它:
myfile.write('%(first_name)s ... %(last_name)s ... %(email)s ... %(password)s' % form.cleaned_data)
更好的是,使用现在首选的str.format()
:
myfile.write('{first_name} ... {last_name} ... {email} ... {password} '.format(**form.cleaned_data))