Я пытаюсь запросить базу данных для отображения результатов из формы. Как только я выберу раскрывающиеся поля формы для моего разыскиваемого запроса, например, Ford C -Max 2019 1.2 Petrol 1500, из которого я сейчас запрограммировал отображение результатов (независимо от марки и модели, так как у меня только один атм), вместо этого из показа мне таблицы с совпадающими результатами я получаю эту ошибку:
Request Method: POST
Request URL: http://127.0.0.1:8000/data/
Django Version: 3.0.3
Exception Type: ValueError
Exception Value:
The view app.views.data didn't return an HttpResponse object. It returned None instead.
Однако у меня есть этот результат в таблице базы данных с именем ford_cmax (игнорировать средние и введенные столбцы)
average entered year liter fuel mileage
9701 2020-04-08 20:59:45 2019 1.2 Petrol 1500
У меня не было этой проблемы раньше, таблица показала все результаты до того, как я настроил фильтры.
Мой код:
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import FormView
from django.db.models import Q
from .models import Average, Query
from .forms import QueryForm
class QueryMakeModel(FormView):
template_name = 'QueryMakeModel.html'
success_url = '/data/'
form_class = QueryForm
def form_valid(self, form):
return HttpResponse("Sweet.")
def index(request):
if request.method == 'POST':
FormSite = QueryForm(request.POST)
if FormSite.is_valid():
pass
else:
FormSite = QueryForm()
return render(request, 'app/QueryMakeModel.html', {'FormSite': FormSite})
def data(request):
if request.method == 'GET':
query= request.GET.get('q')
if query is not None:
lookups= Q(mileage__icontains= query) & Q(fuel__icontains=query) & Q(liter__icontains=query) & Q(year__icontains=query)
results= Average.objects.filter(lookups).distinct()
context = { 'results': results}
return render(request, 'app/db.html', context)
дБ. html (страница отображения данных)
table>
<tr>
<th>Year</th>
<th>Liter</th>
<th>Fuel</th>
<th>Mileage</th>
<th>Average</th>
<th>Entered</th>
</tr>
{% for Average in query_results %}
<tr>
<td>{{ Average.year }}</td>
<td>{{ Average.liter }}</td>
<td>{{ Average.fuel }}</td>
<td>{{ Average.mileage }}</td>
<td>{{ Average.average }}</td>
<td>{{ Average.entered }}</td>
</tr>
{% endfor %}
</table>
QueryMakeModel. html (страница формы основного запроса)
{% block content %}
<p>Please fill the details below:</p>
<form action="/data/" method="post">{% csrf_token %}
{{ FormSite.as_p }}
<button type="submit">
<i class="fa fa-thumb-tack"></i> Query
</button>
</form>
{% endblock %}
models.py
class Query(models.Model):
MAKE = models.CharField(max_length = 50, choices=MAKES)
MODEL = models.CharField(max_length = 50, choices=MODELS)
YEAR = models.IntegerField(max_length = 4, choices=YEARS)
LITER = models.CharField(max_length = 3, choices=LITERS)
FUEL = models.CharField(max_length = 6, choices=FUELS)
MILEAGE = models.IntegerField(max_length = 10, choices=MILEAGES)
class Average(models.Model):
class Meta:
db_table = 'ford_cmax'
average = models.IntegerField(max_length = 6)
entered = models.DateTimeField(primary_key=True)
year = models.IntegerField(max_length = 4)
liter = models.CharField(max_length = 3)
fuel = models.CharField(max_length = 6)
mileage = models.IntegerField(max_length = 10)
urls.py
from django.contrib import admin
from django.urls import path
from app import views
from django.conf.urls import include, url
from app.views import QueryMakeModel
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='Index'),
path('data/', views.data, name='Data')
]