Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py [RSS Feed]

#1 Окт. 25, 2012 19:07:25

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py

Не знаю как сохранить несколько файлов из формы при множественном выборе из диалога <input … multiple=true>.
request.FILES возвращает словарь с ключом - имя поля(image) и значением ключа - список классов изображения.
Подскажите как правильно сохранить все значения в БД из этого словаря?? (проще говоря, как сохранить все файлы из формы)

ОБНОВЛЕНО views.py

models.py:

class Image(models.Model):
    image = models.ImageField(upload_to='images/%Y/%m')
    album = models.ForeignKey(Album)
    created = models.DateField(auto_now_add=True)
    def save(self, *args, **kwargs):
        if kwargs.pop('max_img_count', 1) <= kwargs.pop('curr_img_count', 0):
            return 'The maximum number of images is reached'
        else:
            super(Image, self).save(*args, **kwargs)
            return 'Image is loaded'
    def __unicode__(self):
        return  self.image.name

forms.py:
class ImageForm(ModelForm):
    class Meta:
        model = Image
        exclude = ('album',)
        widgets = {
            'image': widgets.ClearableFileInput(attrs={'multiple':'true'})
                }

views.py:
@login_required()
def load_images(request, albumname):
    album = Album.objects.get(albumname=albumname[:-1])
    max_img_count=10
    message = None
    if request.POST:
        file_list = request.FILES.getlist('image', [])
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid() and len(file_list)<=1:
            image = form.save(commit=False)
            print type(image)
            image.album = album
            message = image.save(curr_img_count=album.image_set.count(),
                                 max_img_count=max_img_count)
        elif form.is_valid() and len(file_list)>1: #вот тут видимо надо менять проверку формы
            for f in file_list:
                try:
                    image = Image(album=album, image=f)
                    print type(image)
                    message = image.save(curr_img_count=album.image_set.count(),
                                            max_img_count=max_img_count)
                except:
                    message = 'loop error'
    else:
        form = ImageForm()
    imagetable = album.image_set.all()
    return render_to_response(  'myimages/images.html',
                                dict(form=form,
                                    message=message,
                                    imagetable=imagetable),
                                    context_instance=RequestContext(request))

Если такой момент есть в документации(я его не обнаружил), киньте пжлст ссылочку.

Отредактировано buddha (Окт. 26, 2012 17:31:00)

Офлайн

#2 Окт. 26, 2012 06:38:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py

Возможно, вам помогут формсеты?

https://docs.djangoproject.com/en/dev/topics/forms/formsets/



Офлайн

#3 Окт. 26, 2012 09:09:28

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py

Попробую. Еще один человек тоже на них направил… Спс.

Офлайн

#4 Окт. 26, 2012 17:29:54

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py

FormSets не под мой случай я так понял. И вообще под какой они случай я не знаю)

Обновил представление.
Теперь проблема:
-Если загружаю в диалоге один файл не явл-ся изображением (например .log), то проверка поля работает нормально
-А вот если я хитро обвожу или выделаю через shift кучку файлов, среди которых есть файл типа .log(к примеру), то проверка поля не проходит и этот файл сохраняется в базу.

Офлайн

  • Начало
  • » Django
  • » Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version