首页 > 解决方案 > 视图...没有返回 HttpResponse 对象。它返回 None 而不是

问题描述

我有一个视图向我抛出以下错误“视图 Apps.General.localidades_vistas.Localidad_Cear 没有返回 HttpResponse 对象。它返回了 None 。” 当我尝试保存一个新的“localidad”时......我通过代码看看你是否可以帮助我。

视图.py

class Localidad_List(ListView):
    model = localidades
    template_name = 'general/localidad_list.html'
    def get_queryset(self):
        buscar = self.request.GET.get('buscalo')
        if buscar:
            object_list = localidades.objects.filter(localidad__contains = buscar)
        else:
            object_list = localidades.objects.all()
        return object_list

class Localidad_Crear(CreateView):
    model = localidades
    form_class = LocalidadForm
    template_name = 'general/localidad_form.html'
    success_url = reverse_lazy('general:localidad_listar')

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            modelo = form.save(commit=False)
            modelo.clocalidad = localidad_max() #'99'
            #print(localidad_max())
            usuario = self.request.user
            modelo.usumodi = str(usuario)
            form.save()
            return HttpResponseRedirect(self.get_success_url())

    def get_success_url(self):
        return reverse('general:localidad_listar')

class Localidad_Edit(UpdateView):
    model = localidades
    form_class = LocalidadForm
    template_name = 'general/localidad_form.html'
    success_url = reverse_lazy('general:localidad_listar')

class Localidad_Delete(DeleteView):
    model = localidades
    template_name = 'general/localidad_delete.html'
    success_url = reverse_lazy('general:localidad_listar')      

def localidad_max():
    try:
        cvalor = localidades.objects.latest('clocalidad').clocalidad
    except:
        cvalor = '0'
    cvalor = str(int(cvalor) + 1)
    return cvalor.zfill(5)

def provincia_load(request):
    cpais = request.GET.get('cpais')
    xprovincias = provincias.objects.filter(cpais = cpais).order_by('provincia')
    return render(request,'general/combo_provincia.html', {'provincias':xprovincias})

网址.py

from .views import from .localidades_vistas import Localidad_List, Localidad_Edit, Localidad_Delete, Localidad_Crear, provincia_load
#, Provincia_Crear, Provincia_Edit, Provincia_Delete

app_name = 'general'

urlpatterns = [
    path('',index, name = 'index'),
    #--------------------- Localidades ---------------------------    
    path('localidades',Localidad_List.as_view(), name = 'localidad_listar'),
    path('localidad_nuevo',Localidad_Crear.as_view(), name = 'localidad_crear'),
    path('localidad_editar/<pk>/',Localidad_Edit.as_view(), name = 'localidad_editar'),
    path('localidad_eliminar/<pk>/',Localidad_Delete.as_view(), name = 'localidad_eliminar'),    
    path('ajax/provincias/', provincia_load, name = 'ajax_provincias'),    
]

表格.py

from django import forms
from .models import paises, provincias, localidades

class LocalidadForm(forms.ModelForm):
    class Meta:
        model = localidades
        # con esto añades un campo de texto que te permite realizar la busqueda, puedes añadir mas de un atributo por el cual se filtrará
        search_fields = ['localidad']

        fields = [
            'localidad',
            'cp',
            'cpais',
            'cprovincia',
            'vigente',
        ]

        labels = {
            'localidad' : 'Localidad',
            'cp' : 'Cod. Postal',
            'cpais' : 'País',
            'cprovincia' : 'Provincia',
            'vigente' : 'Vigente',
        }
        widget= {
            'localidad' :forms.TextInput(attrs = {'class':'form-control'}),
            'cp' :forms.TextInput(attrs = {'class':'form-control'}),
            'cpais' :forms.Select(attrs = {'class':'form-control'}),
    }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['cprovincia'].queryset = provincias.objects.none()
        if 'cpais' in self.data:
            try:
                cpais = int(self.data.get('cpais'))
                self.fields['cprovincia'].queryset = provincias.objects.filter(cpais = cpais).order_by('provincia')
            except (ValueError, TypeError):
                pass
        elif self.instance.pk:
            self.fields['cprovincia'].queryset = self.instance.cpais.provincias_set.order_by('provincia')

localidad_form.html

{% extends 'base/base.html' %}

{% block content %}
<div class="container">
    <form method="post" id="Localidad_Form" data-provincias-url="{% url 'general:ajax_provincias' %}" novalidate >
        {% csrf_token %}
        {{ form.as_p}}
        <button class="btn btn-primary btn-sm" type= "submit">Guardar</button>
    </form>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
    $(document).ready(function(){
        $("#id_cpais").change(function () {
            var url = $("#Localidad_Form").attr("data-provincias-url");  
            var paisId = $(this).val();  
            $.ajax({                       
            data: {
                'cpais': paisId      
                },
            success: function (data) {  
                $("#id_cprovincia").html(data);  
            }
            }); 
        });
    });
    </script>
</div>
{% endblock %}
{% block filtros %}
    <td>
        <a class="btn btn-success btn-sm" href="{% url 'general:provincia_crear' %}">Agregar Provincia</a>
        <a class="btn btn-success btn-sm" href="{% url 'general:pais_crear' %}">Agregar País</a>
    </td>
{% endblock %}

combo_provincia.html

<option value="">---------</option>
{% for provincia in provincias %}
<option value="{{ provincia.cprovincia }}">{{ provincia.provincia }}</option>
{% endfor %}

提前致谢。

PD:我有几个下拉链接,效果很好,这是另一个查询的主题。:-)

标签: djangohttpresponse

解决方案


您遇到此问题是因为如果请求类型不是 POST,您还没有编写 HttpResponse 对象

为了在您的观点中克服这个问题,请编写如果请求类型未发布时将处理的内容

    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})

推荐阅读