2015-10-24 36 views
7

Sonuç sayfasına yönlendirirken bu hatayı aldım. Yeniden yönlendirilen sayfada, "POST.get" işlevi, kullanıcının yeniden yönlendirmeden önce formda girdiği şeyi alamıyor mu?django-'NoneType 'nesnesi callable değil

views.py

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

    def get_success_url(self): 
     return ''.join(
     [ 
      reverse('result'), 
      '?company=',self.request.POST.get('company'), 
      '&region=',self.request.POST.get('region') <is there anything wrong here---?  
     ] 
     ) 


class ReulstView(FormView): 
    context_object_name = 'result_list' 
    template_name = 'result_list.html' 
    model = Result 

    if form.is_valid(): 
     company = form.cleaned_data['company'] 
     region = form.cleaned_data['region'] 

     self.queryset=Result.objects.filter(region=region) 

     return render(request, 'result_list.html', {'form': form}) 

    def get_context_data(self, **kwargs): 
     context = super(ReulstView, self).get_context_data(**kwargs) 
     context["sales"] = self.get_queryset().aggregate(Sum('sales')) 

     context["company"] = self.request.POST.get("company") 
     context["region"] = self.request.POST.get("region") 

     return context 

    def get_queryset(self): 
     return Result.objects.all() 

geri izleme:

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 /result_list/ 
Exception Value: 'NoneType' object is not callable 

Inputform

aynı işlevi için

class InputForm(forms.ModelForm): 
    company=forms.CharField(widget=forms.TextInput, label="Company",error_messages={'required': 'Please enter the company name'},required=True) 

    #region This form can display correctly with drop down list 
    iquery = Dupont.objects.values_list('region', flat=True).distinct() 
    iquery_choices = [('', 'None')] + [(region,region) for region in iquery] 
    region = forms.ChoiceField(choices=iquery_choices) 
, Başka bir kod denedim, hatasız olsa da, form verisini görüntüleyemiyor, hiçbiri olarak göstermiyor. Aşağıdaki linkte soruma cevap Umut:

django- why after redirecting, the form display "None"

+1

daha Traceback veya kod satırı başarısız noktası verebilir misiniz? – Paul

+0

Merhaba @Paul, hangi satırın yanlış olduğuna işaret etmiyor .. Tüm izini kapattım –

+0

Hangi metin editörü veya IDE kullanıyorsunuz? – Paul

cevap

8

Bunun Sorununuz olduğunu düşünüyorum: Bir FormView kullanıyorsunuz ama kullanmak için bir form sınıfı tanımlamadınız. Ya sınıfına bir form_class attr ayarlayabilir veya get_form_class yöntemi geçersiz: Ayrıca

class ReulstView(FormView): 
    context_object_name = 'result_list' 
    template_name = 'result_list.html' 
    model = Result 
    form_class = InputForm 

, form_valid yöntem formu örneğini alacak, bunu elle örneğini gerekmez:

def form_valid(self, form, **kwargs): 
    form = InputForm(self.request.POST) # <- remove this line 
    if form.is_valid(): 
    ... 
+0

Merhaba @Arsh Singh, sence yanlış olan bir şey var mı? "return_to_response ({" object_list ": queryset}) ifadesini" view.to_response "ifadesine geri dönün. –

+0

@Elena Şu an başka bir hata aldığına eminim? – Paul

+0

@Elena İkinci sorunuzun şu anda aldığınız hata ile bağlantılı olabileceğini düşünüyorum. Şimdi tam olarak ne hata yapıyorsun? – Paul

2

Başka bir konu yapalım. :) "Dışarıdan işlev döndür" hatasını elde etmenin tek yolu - işlevden değil, bir şey döndürmeye çalışıyorsunuz. :) Genellikle yanlış ya da yanlış girinti nedeniyle olabilir. Bu hatayı alacağınız kodu verebilir misiniz? Orada girinti ile yanlış bir şey olduğuna inanıyorum.

class ReulstView(FormView): 
    context_object_name = 'result_list' 
    template_name = 'result_list.html' 
    model = Result 

    if form.is_valid(): # <- it is not a function or method 
         # it is a class declaration 
     company = form.cleaned_data['company'] 
     region = form.cleaned_data['region'] 

     self.queryset=Result.objects.filter(region=region) 

     return render(request, 'result_list.html', {'form': form}) 
    def get_context_data(self, **kwargs): #<- and this is a method 
     #... all your following code 

böyle olabilir Django FormViews aşina değilim, ama doğru kod gibi görünür:

class ResultView(FormView): 
    context_object_name = 'result_list' 
    template_name = 'result_list.html' 
    model = Result 

    def form_valid(self, form): 
     company = form.cleaned_data['company'] 
     region = form.cleaned_data['region'] 
     self.queryset=Result.objects.filter(region=region)  
     return render(request, 'result_list.html', {'form': form}) 
+0

Ben view.py güncelledim, indentation sorun nedeniyle olduğunu düşünüyorum, hata "return render (request, 'sonuç_listesi. html ', {' form ': form}) " –

+0

@Elena Eğer sizden gelen soru doğruysa, fonksiyondan değil, geri dönmeye çalışıyorsunuz. Fakat siz haklısınız - bu bir problem değildir. :) Cevabımı güncelledim. – Paul

+0

Öngördüğünüz gibi kodum vardı ama @Arsh Singh'in cevabı abov e "FormView için def form_valid (self, form)" özelliğini kaldırmayı önerir, bu yüzden onu kaldırdım. –

İlgili konular