Форма из модели с загрузкой файла - PullRequest
1 голос
/ 16 сентября 2010

Я пытаюсь имитировать интерфейс администратора для приложения Photologue на внешнем интерфейсе. Чтобы достичь этого, я до сих пор создал немного кода в представлении:

def galleryuploader(request):
    GalleryFormSet = modelformset_factory(GalleryUpload)    
    if request.method == 'POST':
        formset = GalleryFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
            # do something. ... do what?
    else:
        formset = GalleryFormSet()
    return render_to_response("cms_helper/gallery_upload.html", {
        "formset": formset,
    })

и шаблон:

<form method="post" action="">
    {{ formset }} 
    <input type="submit" />
</form>

Я использую метод django " form from models " для генерации этой формы интерфейса.

Проблема: когда я пытаюсь загрузить файл (потому что я загружаю фотографии в фотогалерею) и нажимаю «Отправить», он возвращается с ошибкой формы, сообщающей, что обязательное поле отсутствует (файл).

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

Если у вас есть какие-либо предложения о том, как заставить работать эту форму загрузки, я буду очень рад их услышать. Заранее спасибо!

1 Ответ

3 голосов
/ 16 сентября 2010

Добавьте атрибут enctype="multipart/form-data" в тег формы. Также вам нужно что-то делать с загруженными файлами. Вот пример из django docs :

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            # you'll need to loop through the uploaded files here.
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

def handle_uploaded_file(f):
    destination = open('some/file/name.txt', 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

(см. Комментарий о полпути)

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