Невозможно загрузить изображение в Django, используя ImageField - PullRequest
3 голосов
/ 23 октября 2011

Я пишу свое первое приложение django, которое использует ImageField, и у меня возникли трудности.Проблема в том, что мои изображения не загружаются.Я просмотрел как можно больше примеров.И я не уверен, что здесь происходит.

Я пытаюсь проверить, что мои фотографии загружаются, посмотрев в каталог upload_to.Когда форма отображается на веб-странице, отображается правильная кнопка загрузки файла.Когда я нажимаю "Отправить", код ниже выполняется, но изображения никогда не загружаются.

Исходя из upload_to, я ожидаю увидеть загруженные изображения, чтобы увидеть изображения под: myproject/photos или myproject/media/photos правильно?

Я что-то здесь не так делаю?Как получить изображения для загрузки?

-------------- settings.py -------------

MEDIA_ROOT = '/home/me/django_projects/myproject/media/'
MEDIA_URL = '/media/'

-------------- model.py -------------

class Person(models.Model):
    lastName = models.CharField(max_length=20)
    firstName = models.CharField(max_length=20)
    image = models.ImageField(upload_to='photos', blank=True, null=True)

    #  save executes but no image is saved.
    #  Because images are uploaded along with a new entry, I needed a special
    #  work around to get the self.id
    def save(self):
        for field in self._meta.fields:
            if field.name == 'image':
               if self.id is not None:
                 #save image now
                 field.upload_to = 'photos/%d' % self.id
               else:
                 #Save image later
                 saveImageLast = True
        super(Customer, self).save()  # should create self.id if not already
        if saveImageLast == True:
            field.upload_to = 'photos/%d' % self.id
            super(Customer, self).save()
            print "save complete"  #prints, but no image ...?

-------------- forms.py -------------

class PersonForm(ModelForm):

  class Meta:
      model = Person
      fields = ( 'lastName', 'firstName', 'image' )

Ответы [ 3 ]

12 голосов
/ 23 октября 2011

из документации django, я думаю, что это может помочь (в прошлом это помогло мне):

Во-первых, для загрузки файлов вам нужно убедиться, что ваш элемент правильно определяетenctype как "multipart / form-data"

<form enctype="multipart/form-data" method="post" action="/foo/">
4 голосов
/ 07 июня 2014

По вашему мнению, когда вы создаете экземпляр формы с данными публикации, убедитесь, что вы предоставили запрос. ФАЙЛЫ

form = PersonForm(request.POST, request.FILES)
1 голос
/ 18 марта 2012

Это немного поздно, но метод upload_to не является методом. Это атрибут, который представляет относительный путь от вашего MEDIA_ROOT. Если вы хотите сохранить изображение в папке «photos» с именем self.id, вам нужно создать функцию вверху класса вашей модели. Например:

class Person(models.Model):
    def file_path(instance):
        return '/'.join(['photos', instance.id])
    image = models.ImageField(upload_to=file_path)

Тогда, когда вы на самом деле сохраняете свое изображение, вы бы позвонили:

person = Person(firstName='hey', lasteName='joe')
person.image.save(ImageObject.name, ImageObject)

Подробнее об объектах файла изображения здесь .

Подробнее о upload_to здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...