отказ от ответственности: я знаю, что этот вопрос в основном касается запроса мнения, но я не знаю, как превратить его во что-то с «реальным» кодом.
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 файл (который я не могу иметь), и многие люди сообщили, что им пришлось бороться с ним (например, здесь ).