
Django form vs modelForm
всем привет.
всем известно что в Django есть очень важное составляющая это формы
по сути при создании формы мы определяем "тип формы" то есть форма связанная с моделью или нет = forms.Form или forms.ModelForm
в процессе изучения Django я понял что даже если данные полученные с формы надо сохранить в базе то легко можно использовать форму не сязанная с моделью ау же в процессе обработку данных из ПОСТ запроса сохранять их в модель.
может кто сказать правильно ли так делать или же если даные для какой то модели форма должна быть всегда типа ModelForm ?
или же все зависит от ситуации!?
или правило одно: нету никаких правил )

We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Timeweb
Let me recommend you the excellent hosting on which EVILEG is located.
For many years, Timeweb has been proving his stability.
For projects on Django I recommend VDS hosting
View Hosting
использовать данные напрямую из request.POST - опасно и черевато.
сохранять данные из form.cleaned_data - нормально, но избытачно.
если форма используется для управления объектом модели - УДОБНЕЕ использовать ModelForm, но это не обязательно
проще всего придерживаться догики такой: меняется модель - ModelForm, что-то происходит с несколькими моделями или вообще не меняются модели - Form.
спасибо за исчерпывающий ответ.
вы писали "использовать данные напрямую из request.POST - опасно и черевато" а чему чревато?
ведь если мы берем данные из post, и обрабатываем, проверяем их и только после этого сохраняем
напрямую данные из POST - я имел в виду, без проверок и всего прочего
черевато тем, что там могут быть какие-то плохие данные типа sql-инъекций
а если их проверять и обрабатывать - зачем делать двойную работу (форма делает начальную валидацию по параметрам своих полей + возможность указать какие-то кастомные проверки в Form.clean())?
+ всетаки какое-никакое разделение ответственности:
- представление вызывает форму и отдает ответы
- форма делает все с данными
в форме можно отпределить метод save(), который есть в ModelForm, или process() - чтобы не вызывать двойственность и потом не думать, что это ModelForm
основная мысль - не надо мешать разную логику в одном месте
пусть view - занимается отбработкой HTTP запросов, а формы - обработкой введеных данных
опять же, если у тебя логика, которая подразумевается для выполнения над данными формы, используется где-то еще (например в API) - вынеси это в отдельную функцию, это уже получится "слой бизнес логики" (можно погуглить "services layer django"). Как по мне: ниже самый оптимальный вариант:
это тебе позволит:
1) быстро и просто локализовать ошибки
2) покрыть тестами каждый функционал будет сильно проще
3) просто будет расширять функционал
спасибо за WOW раскрытие теммы