Найти - Пользователи
Полная версия: Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py
Начало » Django » Как через экземпляр подкласса ModelForm сохранить несколько изображений во views.py
1
buddha
Не знаю как сохранить несколько файлов из формы при множественном выборе из диалога <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))

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

https://docs.djangoproject.com/en/dev/topics/forms/formsets/
buddha
Попробую. Еще один человек тоже на них направил… Спс.
buddha
FormSets не под мой случай я так понял. И вообще под какой они случай я не знаю)

Обновил представление.
Теперь проблема:
-Если загружаю в диалоге один файл не явл-ся изображением (например .log), то проверка поля работает нормально
-А вот если я хитро обвожу или выделаю через shift кучку файлов, среди которых есть файл типа .log(к примеру), то проверка поля не проходит и этот файл сохраняется в базу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB