Я сделал приятную форму и большую сложную функцию «добавить» для ее обработки. Она начинается, как это ...Django изменить форму на основе формы добавления?
def add(req):
if req.method == 'POST':
form = ArticleForm(req.POST)
if form.is_valid():
article = form.save(commit=False)
article.author = req.user
# more processing ...
Теперь я действительно не хочу, чтобы дублировать всю эту функциональность в методе edit()
, поэтому я решил edit
может использовать один и тот же шаблон, и, возможно, просто добавьте id
поле в форма, поэтому функция add
знала, что она редактирует. Но есть пара проблем с этим
- Где бы я поставил
article.id
вadd
FUNC? Это должно быть послеform.save
, потому что именно там создается статья, но она даже не дойдет до нее, потому что форма недействительна из-за уникальных ограничений (если пользователь не отредактировал все). Я могу просто удалитьis_valid
чек, но тогда вместоform.save
. - Если форма фактически is недействительна, поле, которое я динамически добавляю в функцию редактирования, не сохраняется.
Так как я могу с этим справиться?
Да, это 'ModelForm'. Мне понадобилось «commit = False» по другим причинам. Статья состоит из целого ряда материалов (включая некоторые отношения m2m). Я не думаю, что он хотел работать с «экземпляром». Однако я попробую попробовать. – mpen
В этом случае я бы предложил поместить отношения m2m (et al) сохранение/проверку в форме вместо представления ... либо переопределить метод сохранения, либо, возможно, изучить формы. Я думаю, это зависит от контекста того, с чем вы работаете ... –
Отличный и тщательный пример! Благодаря! Я узнал больше, чем просто решение этого вопроса. – hobbes3