django - 视图...没有返回 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:我有几个下拉链接,效果很好,这是另一个查询的主题。:-)
解决方案
您遇到此问题是因为如果请求类型不是 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})
推荐阅读
- gradle - Gradle 中的 Extensions 和 Extra 属性之间的区别
- javascript - 在 js 中使用自签名证书发出请求(使用来自 npm 的 request-promise)
- selenium - 使用带有 callTestCase() 函数的测试侦听器
- python - Networkx Graph 绘图节点权重
- sas - 添加组合变量时 SAS 企业指南 DF 为 0 和 B
- python - AWS Glue,输出一个带分区的文件
- moodle - Moodle 本地化 date_selector
- botframework - 在用户开始与我的机器人聊天之前,如何向机器人发送一些初始数据?
- javascript - 选择标签内的跨度标签问题
- java - Spring Boot 2.0 Hibernate 5 EhCache 3 与 JCache