Django Сохранить неполный прогресс по форме

У меня есть django webapp с несколькими пользователями, входящими в систему и заполняющими форму.

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

В настоящее время я использую ModelForm для всех форм, которые я использую, и у Модели есть ограничения для обеспечения достоверных данных (например, грант # должен быть уникальным). Тем не менее, я хочу, чтобы они могли сохранять эти промежуточные данные без какой-либо проверки.

Решение, о котором я думал, кажется довольно неэлегантным и un-django-ey: создайте кнопку «Сохранить частичную форму», которая сохраняет словарь POST, преобразует его в файл полки и создает модель «SavedPartialForm», соединяющую пользователя с частичными формами, сохраненными на полке. Кажется ли это разумным? Есть ли лучший способ сохранить POST dict непосредственно в db? Или это дополнительный модуль, который делает это частичное сохранение формы (что, по-видимому, является довольно распространенным видом деятельности с веб-формами)?

Моя самая большая проблема с моим методом заключается в том, что я хочу, чтобы в конечном итоге смог выполнить эту форму – автоматически автосохранение (скажем каждые 10 минут) в каком-то методе ajax / jquery без фактического нажатия кнопки и отправки запроса POST (например, так что пользователь isn ' t перенаправляется со страницы при срабатывании автосохранения). Я не знаком с jquery, и мне интересно, удастся ли это сделать.

  • удалить пробелы из файла csv
  • ПП отказывается модернизировать
  • Установка NLTK со Стэнфордским НЛП (как StanfordNERTagger, так и StanfordPOSTagger) для испанского
  • Преобразование NetCDF в GRIB2
  • UnicodeDecodeError: кодек «utf-8» не может декодировать ошибку байта
  • Компиляция проекта django в качестве настольного приложения
  • Аналогичный метод из модуля nltk дает разные результаты на разных машинах. Зачем?
  • SQLAlchemy JSON как blob / text
  • 4 Solutions collect form web for “Django Сохранить неполный прогресс по форме”

    В Pro Django есть хорошее решение от Marty Alchin . В двух словах вы создаете еще одну модель, содержащую хэш формы, поле формы и сохраненное значение. Когда вы возобновляете, вы просто загружаете форму в соответствии с ее хешем.

    перед сохранением:

    for field in form.fields: form.fields[field].required = False 

    тогда:

     form.save() 

    Проблема в том, что у вас несколько форм.

    Частичное. Неполное. Полная. Готов к этому. Готов к этому.

    В самом деле, у вас есть форма для этапа рабочего процесса.

    Ничего плохого в этом нет.

    1. Выясните, где вы находитесь в рабочем процессе.

    2. Заполните и представите форму для следующего этапа.

    Формы могут наследовать друг от друга, чтобы сохранить повторяющиеся методы проверки.

    Вставьте следующую форму в свою форму __init__

     for field in form.fields: form.fields[field].required = False 

    Например:

     class MySexyForm(Form): def __init__(self, *args, **kwargs): super(MySexyForm, self).__init__(*args, **kwargs) for field in self.fields: self.fields[field].required = False 

    Затем позвоните:

     form = MySexyForm(...) form.save() 

    Однако вам нужно убедиться, что ваш метод clean() может обрабатывать любые отсутствующие атрибуты, условно проверяя, существуют ли они в cleaned_data. Например, если другая проверка поля формы зависит от customer_id но ваша неполная форма не указала ее, то customer_id не будет находиться в cleaned_data.

    Если это для модельной формы, вы можете проверить, было ли это значение в cleaned_data , и cleaned_data на instance.field если он отсутствовал, например;

     def clean(self): inst = self.instance customer_id_new = self.cleaned_data.get('customer_id', None) customer_id_old = getattr(self.instance, 'customer_id') if inst else None customer_id = customer_id_new if customer_id_new else customer_id_old 

    Помните, что значение нового значения почти наверняка не будет в том же формате, что и старое значение, например, RelatedField действительно может быть RelatedField в экземпляре модели, но pk int в данных формы. Опять же, вам нужно будет обрабатывать эти различия типов в пределах вашего чистого.

    Это одна из областей, где Django Forms не хватает печально.

    Interesting Posts

    Прокрутка селена до нижней части не работает должным образом

    Получение сертификата проверяет ошибку с механизацией

    Selenium WebDriver не может загружать профиль

    Pandas read_csv dtype – ведущие нули

    Ошибка при установке библиотеки изображений Python с помощью pip в Mac OS X 10.9

    Pandas DataFrame хранит список как строку: как преобразовать обратно в список?

    Какие кодировки файлов поддерживаются для исходных файлов Python 3?

    Получение атрибутов целых чисел и поплавков

    Есть ли параметр в matplotlib / pandas, чтобы иметь ось Y гистограммы в процентах?

    Какой самый сжатый способ в Python группировать и суммировать список объектов по одному и тому же свойству

    найти и удалить из многомерного массива numpy

    Создание наборов значений по умолчанию для Matplotlib

    Установите Python 2.6 без использования установщика на Win32

    Ошибка Hadoop Streaming Job с ошибкой в ​​python

    Могу ли я запустить numpy и pandas с помощью Jython

    Python - лучший язык программирования в мире.