Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django imagefield保存非类型对象错误_Python_Django_Django Models - Fatal编程技术网

Python django imagefield保存非类型对象错误

Python django imagefield保存非类型对象错误,python,django,django-models,Python,Django,Django Models,如何使用imagefield上载图像?下面是一个'NoneType'对象,它没有属性“chunks” 我相信我做错了,有人能告诉我正确的方法吗 这是我到目前为止保存上传图像的方法 def add_employee(request): if request.method == 'POST': form_input = AddEmployee(request.POST, request.FILES) if form_input.is_valid(): cd = fo

如何使用imagefield上载图像?下面是一个
'NoneType'对象,它没有属性“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)

您可能应该使用modelforms。使用modelform,您的代码将如下所示:

在forms.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或None
是一种避免检查
request.method==“POST”
的技巧

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


查看
ModelForms

好的,在仔细研究之后,我发现了问题所在


request.FILES
什么也得不到,因此我需要在表单中添加
enctype=multipart/form data
,才能使请求生效。

如果不提供完整的堆栈跟踪,很难为您提供帮助。我们不知道您的AttributeError来自何处。@andreaspelme它来自这一行
new\u emp.photo.save('filename',photo\u file)