django imagefield save NoneType对象错误

时间:2011-09-25 08:53:24

标签: python django django-models

如何使用imagefield上传图片?以下是给我一个'NoneType' object has no attribute 'chunks'

我相信我做错了,有人能告诉我这样做的正确方法吗?

这是我到目前为止保存上传图片的原因。

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)

2 个答案:

答案 0 :(得分:1)

好的,经过一番挖掘,我发现了问题所在。

request.FILES一无所获,因此NoneType我需要在表单中添加enctype=multipart/form-data才能让请求生效。

答案 1 :(得分:0)

您可能应该使用模型。使用modelform,您的代码看起来像这样:

form.py中的

from django import forms

from .models import Employees

class EmployeeForm(forms.ModelForm):
    class Meta:
        model = Employees
在views.py中

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'的技巧。

这是一个简单的例子,您可以轻松添加要包含/排除在模型中的选择字段,为特定表单添加额外字段,添加在保存模型之前运行的额外逻辑,或添加自定义验证。 / p>

请参阅ModelForms的文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/