[python] Django : 모델 양식 “object has no attribute ‘cleaned_data'”

내 수업 중 하나에 대한 검색 양식을 만들려고합니다. 양식의 모델은 다음과 같습니다.

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"]

그리고 내가 사용하는보기는 다음과 같습니다.

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))

양식은 정상적으로 표시되지만 제출하면 오류가 발생합니다. 'SearchForm' object has no attribute 'cleaned_data'

무슨 일이 일어나고 있는지 잘 모르겠습니다. 누군가 나를 도울 수 있습니까? 감사!



답변

어떤 이유로을 확인한 후 양식을 다시 인스턴스화합니다 is_valid(). 양식 은 호출 cleaned_data되었을 때만 속성을 가져 오며이 is_valid()새로운 두 번째 인스턴스에서 호출하지 않았습니다.

두 번째 만 제거하면 form = SearchForm(request.POST)모든 것이 잘 될 것입니다.


답변

다음과 같은 코드를 작성합니다.

def search_book(request):
    form = SearchForm(request.POST or None)
    if request.method == "POST" and form.is_valid():
        stitle = form.cleaned_data['title']
        sauthor = form.cleaned_data['author']
        scategory = form.cleaned_data['category']
        return HttpResponseRedirect('/thanks/')
    return render_to_response("books/create.html", {
        "form": form,
    }, context_instance=RequestContext(request))

문서 와 매우 비슷합니다 .


답변

때때로 우리가 잊어 버리면

return self.cleaned_data

(가) 비록 장고 형태의 청소 기능, 우리는 어떤 데이터가 없습니다 form.is_valid()반환합니다 True.


답변