首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FORMVIEW和GET

FORMVIEW和GET
EN

Stack Overflow用户
提问于 2018-01-18 06:25:38
回答 1查看 1.6K关注 0票数 2

我正在尝试清理一个FORMVIEW,但收效甚微。我有以下表格:

表格...

代码语言:javascript
复制
class BookRequestNumberSearch(forms.Form):

q = forms.IntegerField(required=True)

def __init__(self, *args, **kwargs):
    user = kwargs.pop('user')
    q = kwargs.pop('q', None)
    super(BookRequestNumberSearch, self).__init__(*args, **kwargs)
    self.fields['q'].widget.attrs['class'] = 'name2'

def clean(self):
    cleaned_data = super(BookRequestNumberSearch, self).clean()
    request_number = cleaned_data.get('q')#
    if request_number:
        if Book.objects.filter(request_number__iexact=request_number).exists():
            try:
                Book.objects.get(request_number__iexact=request_number)
                self.add_error('request_number',' Error.')
            except Book.DoesNotExist:
                pass
    return cleaned_data      

和视图...

代码语言:javascript
复制
class BookRequestNumberSearchView(LoginRequiredMixin,FormView):
    form_class = BookRequestNumberSearch
    template_name = 'Book/book_request_number_search.html'
def get_form_kwargs(self):
    kwargs = super(BookRequestNumberSearchView, self).get_form_kwargs()
    kwargs['user'] = self.request.user
    kwargs['q'] = self.request.GET.get("q")
    return kwargs

def get_initial(self):
    init = super(BookRequestNumberSearchView, self).get_initial()
    init.update({'q':self.request.GET.get("q")})
    return init  

和HTML

代码语言:javascript
复制
<form method="GET" autocomplete=off action="{% url 'Book:procedure_request_number_search_detail' %}" >

  <div>
    <h1 class="title">Book Request Number Search</h1>
  </div>

  <div class="section">
    {{ form.q }}
  </div>

这段代码可以工作,但我不知道如何让Django调用CLEAN。我怀疑是不是因为我做了一个不被认出的整洁行动?我整个下午都在玩各种变化,但不管我做什么,CLEAN都被忽略了。谢谢你的任何想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 06:50:19

FormView的工作方式是,一旦有效数据被POSTed,它就调用FormView的form_valid()方法。因此,您可以将form_valid方法添加到BookRequestNumberSearchView中,并在其中访问表单的清理数据,如下所示:

代码语言:javascript
复制
class BookRequestNumberSearchView(LoginRequiredMixin,FormView):
    form_class = BookRequestNumberSearch
    template_name = 'Book/book_request_number_search.html'

    def form_valid(self, form):
        print(form.cleaned_data)
        return # should return an HttpResponse

注意我是如何通过执行form.cleaned_data (根据文档的here)访问清理后的数据的。

根据您的代码,我怀疑您可能没有正确使用clean()方法。clean方法应该简单地处理输入到表单中的数据,并将数据转换为“clean”状态。然后,您需要访问干净的数据,并基于form_valid部分中的数据执行查询。

祝好运!

您可以查看FormView文档here

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

https://stackoverflow.com/questions/48311007

复制
相关文章

相似问题

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