Django: Model Form "object has no attribute 'cleaned_data'"

django, django-forms, python

Solution

For some reason, you're re-instantiating the form after you check `is_valid()`. Forms only get a `cleaned_data` attribute when `is_valid()` has been called, and you haven't called it on this new, second instance.

Just get rid of the second `form = SearchForm(request.POST)` and all should be well.

Problem

I am trying to make a search form for one of my classes. The model of the form is: ``` from django import forms from django.forms import CharField, ModelMultipleChoiceField, ModelChoiceField from books.models import Book, Author, Category class SearchForm(forms.ModelForm): authors = ModelMultipleChoiceField(queryset=Author.objects.all(),required=False) category = ModelChoiceField (queryset=Category.objects.all(),required=False) class Meta: model = Book fields = ["title"] ``` And the view I'm using is: ``` from django.shortcuts import render_to_response, redirect, get_object_or_404 from django.template import RequestContext from books.models import Book,Author from books.forms import BookForm, SearchForm from users.models import User def search_book(request): if request.method == "POST": form = SearchForm(request.POST) if form.is_valid(): form = SearchForm(request.POST) stitle = form.cleaned_data['title'] sauthor = form.cleaned_data['author'] scategory = form.cleaned_data['category'] else: form = SearchForm() return render_to_response("books/create.html", { "form": form, }, context_instance=RequestContext(request)) ``` The form shows up fine, but when I submit it I get an error: `'SearchForm' object has no attribute 'cleaned_data'` I'm not sure what's going on, can someone help me out? Thanks!

Original source