How to prefill the image field on form validation error Django?

Refresh

December 2018

Views

263 time

2

I have a simple Django form with Image field and some other fields. Now the user has entered the form field and pressed on submit. Due to some error, the form has not validated.

As a result of the form not validated, the form image field is cleared of i.e. the user has to again enter the image field. I dont want this to happen. I want the image field to contain the same value the user had entered. Is it possible to do this ?

Note : What I have read and know, there is no way of pre-filling this image field, as it can be a big security threat. But one of my technical clients is insisting that it can be done using session variables of some sort. Is it possible ?

2 answers

2

Для того, чтобы показать изображение в представлении, он должен был бы быть сохранены на сервере, S3, или то, что вы используете для статического / медиа-файлов.

Из JavaScript, вы можете быть в состоянии сохранить выбранный файл в LocalStorage и установить запоминающийся выбранный путь на форме ошибки. Я не уверен , если файловая система HTML5 API позволяет. См http://www.html5rocks.com/en/tutorials/file/filesystem/

Как сказал Мэтью Daly, идя с проверкой на стороне клиента является лучшим выбором; что-нибудь еще, вероятно, будет головной болью.

3

Проверка формы на стороне клиента с помощью JavaScript, и предотвратить подачу, если форма не является действительной. Таким образом, вы не потеряете существующий контент, потому что ваша форма не будет представлены, если он уже не подтвержден OK.

Предполагая, что вы используете JQuery, вы могли бы связать с храповым случае кнопки отправки, и использовать preventDefault, чтобы остановить поведение по умолчанию. Затем проверить форму, и представить его, только если он будет действителен.

Таким образом, вы будете только когда-либо иметь вид, представленный на Джанго, когда он уже был одобрен и так до тех пор, как ваша проверка на стороне клиента является надежным, вы не должны испытывать этот вопрос.