У меня есть представление, которое выдает мне следующую ошибку: «Представление Apps.General.localidades_vistas.Localidad_Crear не вернуло объект HttpResponse. Вместо этого оно вернул None».когда я пытаюсь сохранить новый "localidad" ... я передаю код, чтобы посмотреть, сможете ли вы мне помочь.
views.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})
urls.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'),
]
forms.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: у меня есть пара выпадающих цепочек, которые хорошо работают, и это было предметом другого запроса.: -)