Как получить загруженный файл из встроенной формы в django? - PullRequest
6 голосов
/ 02 февраля 2010

Я пытаюсь создать «крутой» интерфейс загрузки изображений в админ панели django. Проблема в том, что я использую встроенный интерфейс для загрузки экземпляров изображений, но я использую форму jQuery Ajax для загрузки изображений, поэтому была еще одна форма, которую мне нужно создать для загрузки. И теперь функция просмотра django не может получить request.FILES из этой формы, потому что я создал ее без использования django.forms и не могу указать Ввиду функции, какую форму нужно использовать. Поэтому я не могу переопределить стандартную функцию представления для встроенных интерфейсов и не могу воссоздать эту форму, используя django.forms . Так что этот код не работает:

Моя форма:

<form id="uploadForm" enctype="multipart/form-data" method="post" action="upload_picture/">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

Функция просмотра:

def upload_picture(request):
    if request.method == 'POST':
        save_original(request.FILES['file'])
    return HttpResponseRedirect('admin/edit_inline/picture_editor.html')

Может быть, я должен сделать это совершенно по-другому?

Ответы [ 4 ]

2 голосов
/ 12 января 2011

запрос. ФАЙЛЫ должны прекрасно работать с этой формой ручной работы. Django не делает с полем ничего другого, кроме добавления id = "id_file". Я совершенно уверен, что отсутствие идентификатора не помешает переносу в request.FILES.

In [5]: from django import forms

In [6]: class GenericFileForm(forms.Form):
   ...:         file = forms.FileField()
   ...: 

In [7]: g = GenericFileForm()

In [8]: print g
<tr><th><label for="id_file">File:</label></th><td><input type="file" name="file" id="id_file" /></td></tr>
0 голосов
/ 11 августа 2010

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

, например, если вы будете использовать:

$.ajax({
    url: "/uploadPicture?JustForm",
    dataType: ($.browser.msie) ? "text" : "html",
    success: function(data){
        // Put the form contained in data onto the page (it's a string)
        $("formContainer").innerHtml(data)
    }
});

, а затем получить вашу форму, возвращенную вашим представлением

def upload_picture(request):
    if request.GET.has_key('JustForm'):
        return YourFormObject.as_html() <- will include CSRF tags for compat with 1.2
    if request.method == 'POST':
        save_original(request.FILES['file'])
    return HttpResponseRedirect('admin/edit_inline/picture_editor.html')

(игнорировать грубые ошибки, рассматривать как псевдокод)

0 голосов
/ 13 октября 2010

Этот учебник может помочь.

http://embrangler.com/2010/08/ajax-uploads-images-in-django/

0 голосов
/ 14 февраля 2010

Я протестировал этот код, и файлы загружаются просто отлично. Можете ли вы показать jquery, который вы используете для создания формы?

Спасибо.

...