django 1.8错误:'NoneType'对象不可调用 [英] django 1.8 error: 'NoneType' object is not callable

查看:1277
本文介绍了django 1.8错误:'NoneType'对象不可调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请参阅图片,有一个有2个字段的表单。用户输入信息后提交表单。该页面将重定向到另一个html,显示表单与过滤的数据库结果。



我的项目的结构是1个模型,有2个类(inputform; result),2个html和1 views.py。



现在的问题是'NoneType'对象不可调用',所以我怀疑是因为views.py,有什么不对你的帮助是非常感激的,谢谢提前。





来自django的result.views导入ResultView,InputFormView

url

  view.generic import TemplateView,FormView,ListView 

urlpatterns = patterns('',
url(r'^ result_list / $',ResultView.as_view(),name ='result' ,
url(r'^ input / $',InputFormView.as_view(),name ='input'),

views.py

  from result.forms import resultForm 
from result.models import结果,输入
从django.views.generic.list导入ListView
从django.views.generic导入FormView
....

@csrf_exempt

class InputFormView(FormView):
template_name ='inputform.html'
form = InputForm

def get_success_url(self):/ *重定向到结果页面提交表单信息* /
return''.join(
[
reverse('dupont'),
'?company =',self.request.POST.get('公司'),
'?region =',self.request.POST.get('region')
]


class ResultView(ListView):
context_object_name ='result_list'
template_name ='result_list.html'

def get_context_data(self,** kwargs):
context = super(ResultView,self) 。得到_ context_data(** kwargs)
返回上下文

def get_queryset(self):
如果self.request.method =='POST':
form = InputForm self.request.POST)
如果form.is_valid():
company = form.cleaned_data ['company']
region = form.cleaned_data ['region']

/ ---根据表单入口,对数据库进行过滤器----- /

queryset = Result.objects.filter(region = region,company = company)
sales = Result.objects.filter(queryset).aggregate(Sum('sales'))
employee = Result.objects.filter(queryset).aggregate(Sum('employee'))
department = Result.objects.filter(queryset).aggregate(Sum('departments'))

form.save()

return render(request,'result_list.html ,{'公司:公司},{ '区域':区域},{员工:员工},{ '销售':销售}, {'department':departments})

else:
打印form.errors
else:
form = InputForm()
return super(ResultView,自我).get_queryset()

追溯:

 文件C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\core\handlers\ base.pyin get_response 
132. response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件C:\Python27\lib\site-packages\django-1.8。 3-py2.7.egg\django\views\generic\base.pyin view
71. return self.dispatch(request,* args,** kwargs)
文件 C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\base.py在调度
89. return处理程序(request,* args,** kwargs)
文件C:\Python27在
205. \\ lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\edit.py。form = self.get_form()
文件C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\edit.pyin get_form
74. return form_class(** self.get_form_kwargs())
异常类型:TypeError at / input /
异常值:'NoneType'对象不可调用

result_list.html

  div class =basicinfo> <! - 用户提交的输入表单信息 - > 

< table border =1cellpadding =1>
< tr>
< td align =left>公司< / td>
< td> {{company}}< / td>
< / tr>
< tr>
< td align =left> Region< / td>
< td> {{region}}< / td>
< / tr>
< / table>
{%endfor%}
< / div>

<! - 显示数据库中的过滤结果 - >
< td>< table border =0cellspacing =10cellpadding =10>
< tr>< b>销售< / b>< / tr>
< td bgcolor =#F0F0F0> {{销售}}< / TD>

< / tr>
< tr>< b>员工< / b>< / tr>
< tr>
< td bgcolor =#F0F0F0> {{employee.employee__sum}}< / TD>

< / tr>
< tr>< b>部门< / b>< / tr>
< td bgcolor =#F0F0F0> {{departments.departments__sum}}< / TD>
< / td>< / table>

input.html

 < div class =field> 
{{form.company.errors}}
< label for ={{form.company.id_for_label}}>公司:< / label>
{{form.company}}
< / div>

< div class =field>
< label>选择区域:
{{form.region}}
{%for form.region.choices%}
< option value =regionname =regionid = id_region> {{region}}< / option>
{%endfor%}
< / label>
< / div>

根据建议升级的views.py



<$从django.views.generic导入InputForm
从django.views.generic.edit导入FormView
导入FormView,FormMixin
from django .data导入消息
从django.template导入RequestContext
从django.shortcuts导入重定向
从django.db.models导入Sum,Avg
从django.views.generic.detail导入MultipleObjectMixin

class InputFormView(FormMixin,DetailView):
template_name ='inputform.html'
form = InputForm

def post(self,request ,* args,** kwargs):
self.object = self.get_object()
form = self.get_form()
如果form.is_valid():
返回自身.form_valid(form)
else:
return self.form_invalid(form)
print form.errors

def get(self,request,* args,** kwargs):
视图= DupontView.as_view()
return view(request,* args,** kwargs)

def form_valid(self,form):
company = form.cleaned_data ['company ']
region = form.cleaned_data ['region']

queryset = Result.objects.filter(company = company,region = region)
sales = Result.objects。 queryset.aggregate(Sum('sales'))
employee = Result.objects.queryset.aggregate(Sum('employee'))
departments = Result.objects.queryset.aggregate(Sum '))

return super(ResultView,self).form_valid(form)

def get_success_url(self):
return reverse('dupont',kwargs = {'pk':self.object.pk})

类ResultView(MultipleObjectMixin,DetailView):
context_object_name ='result_list'
template_name ='result_list.html'


< ----如何从InputFormView获取提交的信息和查询结果?以下是否正确?--->

def get(self,request,* args,** kwargs):
self.object = self.get_object(queryset = Result.objects.filter(company = company,region = region )
return super(Result,self).get(request,* args,** kwargs)

def get_context_data(self,** kwargs):
context = super (ResultView,self).get_context_data(** kwargs)
上下文['InputFormView'] = self.object
返回上下文

def get_queryset(self):
返回self.object。 ? .all()< ---这里放什么?数据库过滤结果与表单数据区域和公司是否销售,部门,员工?


解决方案

请看这些文件,也许他们会对你有所帮助
https://github.com/EchoUA/Tweaks-and hacks / tree / master / miaomiao


Please see in picture, there is a form with 2 fields. After user entry the information and submit the form. The page will redirect to another html showing the form AND the filtered database result.

The structure of my project is 1 model with 2 classes(inputform; result), 2 html and 1 views.py.

The issue now is "'NoneType' object is not callable'. So I suspect it is because the views.py , there is something wrong. Your help is really appreciated. Thanks in advance.

url

from result.views import ResultView,InputFormView
from django.views.generic import TemplateView,FormView,ListView

urlpatterns = patterns('',    
    url(r'^result_list/$',ResultView.as_view(),name='result'),
    url(r'^input/$',InputFormView.as_view(),name='input'), 
)

views.py

from result.forms import InputForm
from result.models import Result,Input
from django.views.generic.list import ListView
from django.views.generic import FormView
....

@csrf_exempt

class InputFormView(FormView):
    template_name = 'inputform.html'
    form = InputForm

    def get_success_url(self):  /*redirect to result page with submitted form information*/
        return ''.join(
            [
                reverse('dupont'),
                '?company=',self.request.POST.get('company'),
                '?region=',self.request.POST.get('region')
            ]
        )

class ResultView(ListView):
    context_object_name = 'result_list'
    template_name = 'result_list.html'

    def get_context_data(self, **kwargs):
        context = super(ResultView, self).get_context_data(**kwargs)
        return context

    def get_queryset(self):
        if self.request.method == 'POST':
            form = InputForm(self.request.POST)
            if form.is_valid():
                company = form.cleaned_data['company']
                region = form.cleaned_data['region']

/---Based on form entry, do the filter on the database-----/

                queryset=Result.objects.filter(region=region,company=company)
                sales=Result.objects.filter(queryset).aggregate(Sum('sales'))
                employee=Result.objects.filter(queryset).aggregate(Sum('employee'))
                departments=Result.objects.filter(queryset).aggregate(Sum('departments'))

                form.save()

                return render(request,'result_list.html',{'company':company},{'region':region},{'employee':employee},{'sales':sales},{'departments':departments})

            else:
                print form.errors
        else:
            form=InputForm()                   
        return super(ResultView,self).get_queryset()

Traceback:

    File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\core\handlers\base.py" in get_response
132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\base.py" in view
71.             return self.dispatch(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\base.py" in dispatch
89.         return handler(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\edit.py" in get
205.         form = self.get_form()
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\edit.py" in get_form
74.         return form_class(**self.get_form_kwargs())
Exception Type: TypeError at /input/
Exception Value: 'NoneType' object is not callable

result_list.html

<div class="basicinfo">         <!--Entry Form information submitted by user-->

    <table border="1" cellpadding="1">
    <tr>
        <td align="left">Company</td>
        <td>{{ company }}</td>
    </tr>
    <tr>
        <td align="left">Region</td>
        <td>{{ region }}</td>
    </tr>
  </table>
{% endfor %}
</div>     

<!--Showing the filtered result in database-->  
<td><table border="0" cellspacing="10" cellpadding="10">
<tr><b>Sales</b></tr>
<td bgcolor="#F0F0F0"> {{sales}}</td>

</tr>
<tr><b>Employee</b></tr>
<tr>
<td bgcolor="#F0F0F0"> {{employee.employee__sum}}</td>

</tr>
<tr><b>Departments</b></tr>
<td bgcolor="#F0F0F0"> {{departments.departments__sum}}</td>
</td></table>

input.html

<div class="field">
        {{ form.company.errors }}
        <label for="{{ form.company.id_for_label }}">Company:</label>
        {{ form.company }}
</div>

<div class="field" >
<label> Select the Region:
    {{ form.region }}
        {% for region in form.region.choices %}
        <option value="region" name= "region" id="id_region">{{region}} </option>
        {% endfor %}
</label>
</div>

Upgraded views.py based on suggestion

from result.forms import InputForm
from django.views.generic import DetailView
from django.views.generic.edit import FormView,FormMixin
from django.contrib import messages
from django.template import RequestContext
from django.shortcuts import redirect
from django.db.models import Sum,Avg
from django.views.generic.detail import MultipleObjectMixin

class InputFormView(FormMixin,DetailView):
    template_name = 'inputform.html'
    form = InputForm

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form=self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
            print form.errors

    def get(self, request, *args, **kwargs):
        view = DupontView.as_view()
        return view(request, *args, **kwargs)

    def form_valid(self, form):
        company = form.cleaned_data['company']
        region = form.cleaned_data['region']

        queryset=Result.objects.filter(company=company,region=region)
        sales=Result.objects.queryset.aggregate(Sum('sales'))
        employee=Result.objects.queryset.aggregate(Sum('employee'))
        departments=Result.objects.queryset.aggregate(Sum('departments'))

        return super(ResultView,self).form_valid(form)

    def get_success_url(self):
        return reverse('dupont', kwargs={'pk': self.object.pk})

class ResultView(MultipleObjectMixin,DetailView):
    context_object_name = 'result_list'
    template_name = 'result_list.html'


    <----how can I get the submitted information and query result here from InputFormView? Is following correct?--->

    def get(self, request, *args, **kwargs):
        self.object = self.get_object(queryset=Result.objects.filter(company=company,region=region))            
        return super(Result, self).get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(ResultView, self).get_context_data(**kwargs)
        context['InputFormView']= self.object
        return context

    def get_queryset(self):
        return self.object. ? .all()  <---what to put here? are they  "sales","departments","employee" from database filtered result together with the form data-"region" and "company"?

解决方案

please take a look at these files, maybe they will be helpful to you. https://github.com/EchoUA/Tweaks-and-Hacks/tree/master/miaomiao

这篇关于django 1.8错误:'NoneType'对象不可调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆