django imagefield save NoneType Ошибка объекта - PullRequest
0 голосов
/ 25 сентября 2011

Как я могу загрузить изображения с 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 ]

1 голос
/ 25 сентября 2011

Ладно, покопавшись, я выяснил, в чем проблема.

request.FILES ничего не получает, поэтому NoneType мне нужно было добавить enctype=multipart/form-data в мою форму, чтобы запрос работал.

0 голосов
/ 25 сентября 2011

Возможно, вам следует использовать модели.С моделью, ваш код будет выглядеть примерно так:

в 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 or None - это трюк, чтобы избежать необходимости проверять request.method == 'POST'.

Это простой случай, вы можете легко добавить выбранные поля, которые будут включены / исключены из вашей модели, добавить дополнительные поля для конкретной формы.добавьте дополнительную логику для запуска до сохранения модели или добавьте пользовательскую проверку.

См. документацию по ModelForms: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

...