首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django:模型形式“对象没有属性'cleaned_data'”

Django:模型形式“对象没有属性'cleaned_data'”
EN

Stack Overflow用户
提问于 2010-11-30 06:01:53
回答 3查看 117.9K关注 0票数 91

我正在尝试为我的一个班级制作一个搜索表。表单的模型是:

代码语言:javascript
复制
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"]

我使用的视图是:

代码语言:javascript
复制
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'

我不知道发生了什么事,有人能帮帮我吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-30 06:27:42

由于某些原因,您在检查is_valid()之后重新实例化表单。表单只有在调用了is_valid()时才会获得cleaned_data属性,而您还没有在这个新的第二个实例上调用它。

只要去掉第二个form = SearchForm(request.POST),一切都会好起来的。

票数 207
EN

Stack Overflow用户

发布于 2010-11-30 06:25:18

我会像这样写代码:

代码语言:javascript
复制
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))

就像documentation一样。

票数 8
EN

Stack Overflow用户

发布于 2014-05-09 21:45:04

有时,如果我们忘记了

代码语言:javascript
复制
return self.cleaned_data 

在django forms的干净函数中,我们将不会有任何数据,尽管form.is_valid()将返回True

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4308527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档