Django: ввод поля формы забыт/удален для FileField при проверке

У меня есть следующая настройка в Django. Ввод текста, проверенный CharField и FileField для загрузки изображения. Желаемый ответ, когда поле пусто, должен состоять в том, что исходные данные в форме присутствуют, и все, что нужно сделать пользователю, это заполнить недостающие данные. Я перечислил две ситуации, которые могут потребовать проверки, и текущее состояние реакции приложения:

  • Текст присутствует, но изображение забыто. Результат после перезагрузки: текст, который изначально был в сообщении, все еще присутствует, и все, что нужно сделать пользователю, это загрузить файл. Это работает по желанию. Превосходно
  • Текст забыт, но изображение есть. Результат после перезагрузки: Изображение больше не присутствует и требует, чтобы пользователь загружал его снова, что нежелательно.

Как сохранить данные файла после проверки?

view.py

def signin(request, template="signin.html"):

    c['form'] = SignInForm()
    if request.method == 'POST':
        c['form'] = SignInForm(request.POST, request.FILES)

        if c['form'].is_valid():

            #TODO: Commit data
            return redirect("somwhere_else.html")

    return render(request, template, c)

forms.py

class SignInForm(forms.Form):
    name = forms.CharField(max_length=50,required=True)
    photo_input = forms.FileField(required=True)

person Rich    schedule 23.10.2014    source источник
comment
эй, чувак, есть ли шанс, что ты нашел решение для этого? :)   -  person Vucko    schedule 13.12.2016


Ответы (1)


Здесь я нашел:

"Вы не можете указать какое-либо значение в элементе управления FileUpload из-за ограничения безопасности.

Представьте, что вы, например. есть такая возможность, вы указываете путь к файлу на веб-сервере, и после того, как пользователь отправил страницу, вы загружаете файл, который на самом деле не был выбран пользователем. Итак, в данном случае используется кража файла с пользовательского компьютера. Таким образом, браузер ограничивает возможности управления FileUpload на стороне клиента, чтобы пользователь мог просто выбрать файл и подтвердить загрузку на сервер.

Таким образом, вы должны сделать выбор файла последним действием, которое пользователь может выполнить перед отправкой.

Или используйте подход AJAX, чтобы не отправлять всю страницу при выборе чего-либо».

person madzohan    schedule 23.10.2014