Общий вид на основе класса Django (Createview) 'bool' объект не имеет атрибута '__dict__' ошибка

Я столкнулся с проблемой при создании объекта через CreateView (используя модельную форму).

Сначала код:

Вид:

class KlientCreateView(CreateView):
form_class = KlientCreateForm
model = Klient
template_name = 'forms/klient_pridat.html'
success_url = '/thanks'

URLКонф.:

url(r'^klient_pridat/$', KlientCreateView.as_view(), name='url_klient_pridat'),

Шаблон:

{% block content %}
<form action="" method="post">{% csrf_token %}
<h3>formular</h3>
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}    


Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/base.py" in view
  47.             return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  68.         return handler(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/edit.py" in post
  172.         return super(BaseCreateView, self).post(request, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/views/generic/edit.py" in post
  138.             return self.form_valid(form)
File "/usr/lib/python2.7/site-packages/django/views/generic/edit.py" in form_valid
  113.         return super(ModelFormMixin, self).form_valid(form)
File "/usr/lib/python2.7/site-packages/django/views/generic/edit.py" in form_valid
  60.         return HttpResponseRedirect(self.get_success_url())
File "/usr/lib/python2.7/site-packages/django/views/generic/edit.py" in get_success_url
  101.             url = self.success_url % self.object.__dict__

Exception Type: AttributeError at /klient_pridat/
Exception Value: 'bool' object has no attribute '__dict__'

После заполнения формы и нажатия кнопки «Отправить» я получаю страницу с ошибкой с

'bool' object has no attribute '__dict__'

Из трассировки и выполнения поиска я предполагаю, что это вызвано методом get_success_url() (вероятно, неправильным «действием» в форме. Я тоже экспериментировал с этим:

<form action="{% url url_klient_pridat %}" method="post">{% csrf_token %}
OR <form action="" method="post">{% csrf_token %}
OR <form action="/klient_pridat/" method="post">{% csrf_token %}

Есть идеи?


person Boun    schedule 19.12.2012    source источник


Ответы (1)


KlientCreateForm.save должен вернуть экземпляр Klient.


Прямо сейчас он возвращает bool (то есть True или False).

person Thomas Orozco    schedule 19.12.2012
comment
Вы совершенно правы! Я не мог правильно расшифровать сообщение об ошибке. KlientCreateForm save метод имел return true, что и вызвало ошибку. После изменения на return new_klient (где new_klient создается методом сохранения, представляющим новый объект в базе данных), все работает нормально. Что меня немного смущает, тот же неправильный метод сохранения работал с использованием другого ModelForm, где он не использовался в общем представлении на основе классов, а обрабатывался вручную в собственном представлении. - person Boun; 20.12.2012
comment
@Boun, вероятно, это потому, что в вашем представлении не использовался этот результат, а был общий! - person Thomas Orozco; 20.12.2012