косяк с django

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

chriselwart

в общем гугление дало результат:
такая инициализация формы действительно не делает ее валидной, что есть предсказуемое (как оказалось но нежелаемое

Big_Den

Так ты же данные в форму не даёшь. Она у тебя не is_bound и поэтому не is_valid.
Надо
f=PostForm(request.POST, instance=p)  

И тогда будет ок.

chriselwart

Ну это я загуглил уже.
Просто интересен такой момент. Допустим я описал в форме в параметре fields 4 поля. При создании они все заполняются.
А при апдейте я посылаю только два из них предполагая, что остальные два он возьмет из сохранненого объекта. Но этого не происходит и он сука вываливается с ошибкой.
Пока единственным решением видится посылка второй раз уже добавленных данных вместе с новыми (т.е. посылать все 4 поля).
Остальное криво и не по феншую.

Big_Den

По-моему, стоит тогда сделать отдельно PostCreationForm с четырьмя полями в fields и PostUpdateForm, с двумя полями

chriselwart

ну в идеале да, но я там одну либу юзаю и чтобы ей объяснить что у меня две формы надо будет ее допилить, а мне влом :)
Оставить комментарий
Имя или ник:
Комментарий: