django imagefield save无类型对象错误
问题描述:
如何将图像上传到imagefield?以下是给我一个'NoneType' object has no attribute 'chunks'
。django imagefield save无类型对象错误
我相信我做错了,有人可以告诉我这样做的正确方法吗?
这是我迄今为止保存上传的图像。
def add_employee(request):
if request.method == 'POST':
form_input = AddEmployee(request.POST, request.FILES)
if form_input.is_valid():
cd = form_input.cleaned_data
new_emp = Employees(
first_name = cd['first_name']
.....
)
new_emp.save()
photo_file = cd['photo_file']
new_emp.photo.save('filename', photo_file)
return HttpResponseRedirect('/thanks/')
forms.py和models.py
class AddEmployee(forms.Form):
...
photo_file = forms.ImageField(required=False)
class Employees(models.Model):
...
photo = models.ImageField(upload_to='employee_photos', blank=True, null=True)
答
你或许应该使用modelforms。用的ModelForm,您的代码会是这个样子:
在forms.py:
在views.pyfrom django import forms
from .models import Employees
class EmployeeForm(forms.ModelForm):
class Meta:
model = Employees
:
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import EmployeeForm
def add_employee(request):
form = EmployeeForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return HttpResponseRedirect('/thanks/')
return render(request, 'your_template.html', {'form': form})
这是标准/最佳实践的方式来处理与模型相关的表单。 request.POST or None
是避免检查request.method == 'POST'
的诀窍。
这是一个简单的例子,您可以轻松地添加选择字段以从模型中包含/排除,为特定表单添加额外字段,在保存模型之前添加额外的逻辑,或者添加自定义验证。
查看文档ModelForms
:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/
答
好了一些后周围挖我发现了什么问题。
request.FILES
没有任何内容,因此我需要在我的表单中添加NoneType
以使请求生效。
如果不提供完整的堆栈跟踪,则很难帮助您。我们不知道你的AttributeError来自哪里。 – andreaspelme
@andreaspelme它来自这一行'new_emp.photo.save('filename',photo_file)' – zentenk