Как создать многошаговую форму в django, где шаги зависят друг от друга - PullRequest
0 голосов
/ 11 января 2020

отказ от ответственности: я знаю, что этот вопрос в основном касается запроса мнения, но я не знаю, как превратить его во что-то с «реальным» кодом.

context

В настоящее время я создаю форму (или набор форм), которая позволит пользователям заполнять информацию отслеживания времени.

Процесс

Процесс может быть разложен в 3 шага:

  • предоставляют некоторую базовую информацию (дата и вид деятельности - например, работа над проектом, встречи, встреча с клиентом, ...)
  • в зависимости от вид деятельности , предоставьте более подробную информацию (например, название проекта, имя клиента, затраченное время, ...)
  • отправьте форму

модель

Вся информация хранится в одной модели. Поэтому требуется только информация, предоставленная на шаге 1 (дата и вид деятельности).

текущий подход

В настоящее время у меня есть 1 django ModelForm, который отображается на экране. Все данные проверяются на уровне модели (поэтому бизнес-логика c также применяется, если пользователи хотят вводить данные через API-интерфейсы). На внешнем интерфейсе управление различными шагами осуществляется с помощью вкладок и Javascripts (которые переключают видимость дополнительной информации для предоставления на основе переключателя на первой вкладке).

текущие болевые точки

  • некоторая проверка выполняется на стороне клиента и на стороне сервера (общие поля), в то время как некоторая проверка выполняется только на стороне сервера
  • текущее решение кажется грязным , и у меня есть ощущение, что я работаю против django framework
  • Это решение вынуждает меня потенциально стирать данные при сохранении модели. Если пользователь выбирает один тип действия, заполняет детали для этого типа, меняет свое мнение и выбирает другой тип, заполняет данные для действия, я должен стереть данные, предоставленные для первого действия, потому что они больше не актуальны.

текущие мысли

Я думал о создании n класса ModelForms (common, project_activity, meeting_activity, customer_visit, ...), в котором только соответствующие поля будут отображаться и станут обязательными. Затем, по мнению, думал о том, чтобы приступить к шагам: 1. общий 2. на основе данных, размещенных на общем, представить соответствующую форму 3. представить

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

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

...