2013-05-12 2 views
1

Я думал, что легче будет начать использовать форму моделей вместо обычных форм (отказаться от всех простых вещей, которые предоставляет модель). Но когда я пытаюсь сделать это:Работа с формами форм в Django

>>> m = Model.objects.get(pk=1) 
>>> f = ModelForm(instance=m) 
>>> f.is_valid() 
False 
>>> f.save() 
AttributeError: 'ModelForm' objects has no attribute 'cleaned_data' 

Я думаю, Джанго documentation неправильно, говоря:

Каждая форма производства ModelForm также имеет метод сохранения(). Этот метод создает и сохраняет объект базы данных из данных, привязанных к форме . Подкласс ModelForm может принимать экземпляр существующей модели как экземпляр аргумента ключевого слова; если это будет предоставлено, save() обновит этот экземпляр. Если это не входит в комплект, кроме() создаст новый экземпляр указанной модели

Причина это просто не работает для меня.

Я прав, что документация django неверна?

Заранее спасибо.

ответ

5

Возможно, вы забыли добавить «данные» в экземпляр ModelForm в соответствии с запросом пользователя. POST.

f = ModelForm(data=request.POST, instance=m) 
f.is_valid() # is True if the data is ok. 

В любом случае, было бы лучше, чтобы опубликовать соответствующий код: модель класс, класс модели формы и Ваше мнение.

EDIT: Вы должны добавить data= параметр (или первый параметр, если не назвать его) к ModelForm инициализации, если вы хотите is_valid() работать. is_valid предназначен для просмотра данных на основе различных правил проверки, и только в том случае, если все в порядке, позволяет сохранить ModelForm. Инициализация ModelForm только с параметром named instance= не вызывает никакой проверки, потому что нет ничего нового для проверки.

+0

Вы знаете, используя ModelForm (независимо от экземпляра = m) или ModelForm (data = whatever, instance = m), получается то же самое в этом случае. Тем не менее, я не могу обновить только одно поле, он говорит, что каждое поле требуется, что делает is_valid return False. Но это должно иметь какое-то отношение к моей модели. –

+0

Да, я знаю. В фрагменте кода был включен только параметр «instance =» для инициализации ModelForm. Также: включите в свой вопрос более релевантный код. И: документация Django, безусловно, не является ошибочной в этом пункте, о котором вы упомянули. – mawimawi

Смежные вопросы