косяк с django
такая инициализация формы действительно не делает ее валидной, что есть предсказуемое (как оказалось но нежелаемое
Надо
f=PostForm(request.POST, instance=p)
И тогда будет ок.
Просто интересен такой момент. Допустим я описал в форме в параметре fields 4 поля. При создании они все заполняются.
А при апдейте я посылаю только два из них предполагая, что остальные два он возьмет из сохранненого объекта. Но этого не происходит и он сука вываливается с ошибкой.
Пока единственным решением видится посылка второй раз уже добавленных данных вместе с новыми (т.е. посылать все 4 поля).
Остальное криво и не по феншую.
По-моему, стоит тогда сделать отдельно PostCreationForm с четырьмя полями в fields и PostUpdateForm, с двумя полями
ну в идеале да, но я там одну либу юзаю и чтобы ей объяснить что у меня две формы надо будет ее допилить, а мне влом
Оставить комментарий
chriselwart
Привет. Определяю я тут модельку. К ней определяю ModelForm.Дальше делаю элементарное действие:
from blog.models import Post
from blog.forms import PostForm
p=Post.objects.all[0]
f=PostForm(instance=p)
и тут
f.is_valid выдает False
При попытке засейвиться он мне говорит что то типа:
AttributeError: 'PostForm' object has no attribute 'cleaned_data'
Т.е. он не валидирует объект из базы, который в базу попал через эту же форму, когда создавался.
Вообще задача примерно следующая:
я определяю форму, далее отдаю ей данные в случае создания и изменения объектов, при этом обновление объектов у меня чуток кастрированное и полей я передаю меньше, чем при создании (ну не хочу я, чтобы пользователь мог менять некоторые поля).
Соответственно выолетают ошибки, что мол поля не указываешь, хотя по идее при обновлении объекта он пустые поля должен игнорить, не?