Ошибка формы Django

class JobForm(forms.ModelForm):
    class Meta:
        model = models.Job

Это было моей формой, теперь пытаться сохранить ее повысит исключение, и пытающийся проверить это просто перестал работать без ошибок....

job = get_object_or_404(models.Job, pk=1)
form = forms.JobForm(instance = job)
try:
    form.save()
except:
    print sys.exc_info()

#=>(<type 'exceptions.AttributeError'>, AttributeError("'JobForm' object has no attribute 'cleaned_data'",), <traceback object at 0x1029dbb48>)

Попробованный для проверки его:

if form.is_valid():
    form.save()
else:
    print 'error'
    print form.errors, len(form.errors)
#=> 'error' 
#=> 0

Таким образом, форма не допустима, но нет никаких ошибок! Какая-либо идея?

6
задан khelll 6 March 2010 в 17:18
поделиться

2 ответа

Ваша форма определенно не связана. Прочитайте о Связанные и несвязанный формы.

Из этой документации:

Чтобы привязать данные к форме, передать данные в виде словаря в качестве первого параметра в конструктор класса Form.

Это означает, что изменение поля в модели не делает форму связанной. Эти значения необходимо передать явно через конструктор. Но:

Обратите внимание, что при передаче пустого словаря создается связанная с форма с пустыми данными

, и учитывайте это

Если у вас есть связанный экземпляр Form и вы хотите каким-то образом изменить данные или если вы хотите привязать несвязанный экземпляр Form к некоторым данным, создайте другой экземпляр Form. Изменить данные в экземпляре Form невозможно. После создания экземпляра Form следует считать его данные неизменяемыми, независимо от того, есть ли у него данные или нет.

Если вы проверяете форму unbound

Бессмысленно проверять форму без данных, но для записи вот что происходит с несвязанными формами:

>>> f = ContactForm()
>>> f.is_valid()
Ложь
>>> f.ошибки
{}

19
ответ дан 8 December 2019 в 05:54
поделиться

Я предполагаю, что вы не можете сохранить форму модели, которая была создана только с данными экземпляра (я просто пытался сделать это с одной из моих форм и получил ту же ошибку), потому что форма не становится связанная форма, пока вы не передадите дополнительную информацию. На самом деле не имеет смысла предоставлять в форму только те данные, которые уже существуют в модели (а затем сохранять их снова), поскольку никаких изменений не будет. Если это происходит из html-формы, вы также должны передать request.POST (или request.GET) в форму.

3
ответ дан 8 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: