Django: Показать информацию базы данных, чтобы соответствовать форме? ValueError: .. не возвращает объект HttpResponse. Вместо этого он вернулся - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь запросить базу данных для отображения результатов из формы. Как только я выберу раскрывающиеся поля формы для моего разыскиваемого запроса, например, 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')
]

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Последние строки этого кода:

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)

    else:  #you also have to return an HTTP response in this case
        return render(request, 'app/db.html', context)
0 голосов
/ 15 апреля 2020

Я понимаю, что это не объект в вашей форме из viwes.py, но просто идея, так что я не понимаю ваш проект !!

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.Query = self.request.Query
    self.object.save()
    return super().form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...