Mam formularz, po wprowadzeniu informacji, na podstawie informacji, filtruje bazę danych i wykonuje pewne obliczenia, a następnie wyświetla wynik przekierowanego adresu URL.django - dlaczego po przekierowaniu wyświetla się formularz "Brak"
Rzeczywiście mogę przekierować do innego adresu URL i pomyślnie wyświetlić wynik. Ale problem polega na tym, że nie może wyświetlać żadnych danych przesłanych przez użytkownika, po prostu nie pokazuje niczego dla każdego pola, a wynik nie jest oparty na dopasowanym zapytaniu. Powiedzmy, że suma, to po prostu podsumowanie wszystkich kolumn w bazie danych, bez użycia przefiltrowanego wyniku.
Podejrzewam, że zestaw zapytań nie przekazuje przefiltrowanego wyniku do def get_context_data, dlatego zestaw zapytań w get_context_data nie działa.
Naprawdę dziękuję bardzo, jeśli rozwiążesz moje wątpliwości.
(zrobiłem wersję EDIT oparciu o sugestię, aby połączyć 2 Ćwiczenia, nadzieję, że ktoś może skorygować tę wersję EDIT dzięki)
urls.py
url(r'^result_list/$',ResultView.as_view(),name='result'),
url(r'^input/$',InputFormView.as_view(),name='input'),
views.py
class InputFormView(request):
#class InputFormView(FormView):
template_name = 'inputform.html'
form_class = InputForm
response = HttpResponse('result')
request_form_data = request.POST #you need to sanitize/clear this data
response.set_cookie('form_data', request_form_data)
#redirect to result page with submitted form information
def get_success_url(self):
return ''.join(
[
reverse('result'),
'?company=',self.request.POST.get('company'), <--do I need to change "POST" into "USER"?
'®ion=',self.request.POST.get('region')
]
)
#class ResultView(ListView):
class ResultView(request):
context_object_name = 'result_list'
template_name = 'result_list.html'
model = Result
def get_context_data(self, **kwargs):
context = super(ResultView, 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):
if self.request.method == 'POST':
form = InputForm(self.request.POST)
if form.is_valid():
company = form.cleaned_data['company']
region = form.cleaned_data['region']
queryset=Result.objects.filter(region=region)
return queryset
return Result.objects.all()
if request.COOKIES.has_key('form_data'):
value = request.COOKIES['form_data'] #this data also should be sanitized
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>
</div>
<!--Showing the filtered result in database-->
<td><table border="0" cellspacing="10" cellpadding="10">
<tr><b>Sales</b></tr>
<td bgcolor="#F0F0F0"> {{ sales.sales__sum }}</td>
</tr>
<tr><b>Employee</b></tr>
<tr>
<td bgcolor="#F0F0F0"> {{ employee.employee__sum }}</td>
</table>
Edit- łącząc widoki klasa 2
import urllib
#@csrf_exempt
class ResultView(ListView):
context_object_name = 'result_list'
template_name = 'result_list.html'
model = Result
def get_queryset(self):
form = InputForm(self.request.GET)
if form.is_valid():
company = form.cleaned_data['company']
region = form.cleaned_data['region']
queryset=Result.objects.filter(region=region)
return queryset
return Result.objects.all()
def get_success_url(self):
params = {
'company': self.request.POST.get('company'),
'region': self.request.POST.get('region')
}
return ''.join([reverse('result'), '?', urllib.urlencode(params.items())])
def get_context_data(self,**kwargs):
context = super(ResultView, self).get_context_data(**kwargs)
context["sales"] = self.get_queryset().aggregate(Sum('sales'))
context["company"] = self.request.GET.get("company")
context["region"] = self.request.GET.get("region")
return context
** Edit- urls.py **
url(r'^result_list/$',ResultView.as_view(),name='result'),----for the result page
url(r'^input/$',result.views.get_success_url,name='input') -----for the form, I am not sure if this line correct or not?
** Co ** dokładnie pokazuje Brak? –
Wierzę, że tak właśnie się dzieje - Zakładasz, że dane mają być w kontekście 'POST', ale kiedy przekierowujesz na inną stronę, nie jest to już" POST "- dlatego tracisz dane w kontekście. Jednym ze sposobów podejścia do tego byłoby wysłanie argumentów POST jako kwargs do przekierowanego widoku. – karthikr
hi @ Daniel Roseman, na przekierowanej stronie, wartość "firma" i "region" pokazuje "Brak" –