Я получаю ошибку "Broken pipe", когда пытаюсь отправить информацию с помощью формы на django
Я работаю на локальном сервере, вот моя ошибка на консоли:
[17/Sep/2024 09:54:26,384] - Broken pipe from ('127.0.0.1', 53046)
другие ошибки:
аргументint() должен быть строкой, байтоподобным объектом или вещественным числом, не 'NoneType'
Не удалось выполнить ограничение NOT NULL: CAPER_factores.f1
Когда я пытаюсь отправить форму, даже если у меня заполнены все факторные входы и в моделях указано, что по умолчанию они принимают значение 0, она сообщает мне, что у них нулевое значение или "NoneType"
Вот мои модели:
Вот мои формы:
class CalificacionesForm(forms.ModelForm):
class Meta:
model = Calificaciones
fields = ['periodo_desde', 'periodo_hasta', 'confirmado', 'impreso', 'pdf', 'periodo_anio']
widgets = {
'periodo_desde': forms.DateInput(attrs={'type': 'date'}),
'periodo_hasta': forms.DateInput(attrs={'type': 'date'}),
'puntaje': forms.HiddenInput(),
'personal': forms.HiddenInput(),
}
class FactoresForm(forms.ModelForm):
class Meta:
model = Factores
fields = ['f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14']
widgets = {
'personal': forms.HiddenInput(),
'calificaciones': forms.HiddenInput(),
}
class FundamentosForm(forms.ModelForm):
class Meta:
model = Fundamentos
fields = ['f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14']
widgets = {
'personal': forms.HiddenInput(),
'calificaciones': forms.HiddenInput(),
'f1': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f2': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f3': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f4': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f5': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f6': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f7': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f8': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f9': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f10': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f11': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f12': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f13': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
'f14': forms.Textarea(attrs={'style': 'max-height: 1rem; resize: none;'}),
}
вот мой вид для форм:
def calificar(request, pk):
template_name = 'calificar_form.html'
personal = get_object_or_404(Personal, pk=pk)
if request.method == 'POST':
factores_form = FactoresForm(request.POST)
fundamentos_form = FundamentosForm(request.POST)
calificacion_form = CalificacionesForm(request.POST)
if factores_form.is_valid() and fundamentos_form.is_valid() and calificacion_form.is_valid():
total_factores = int(request.POST.get('total_factores', 0))
personal_instance = personal
calificacion_instance = calificacion_form.save(commit=False)
factores_instance = factores_form.save(commit=False)
fundamentos_instance = fundamentos_form.save(commit=False)
calificacion_instance.puntaje = total_factores
calificacion_instance.personal = personal_instance
factores_instance.personal = personal_instance
fundamentos_instance.personal = personal_instance
factores_instance.calificaciones = calificacion_instance
fundamentos_instance.calificaciones = calificacion_instance
calificacion_instance.save()
factores_instance.save()
fundamentos_instance.save()
return redirect('home')
else:
calificacion_form = CalificacionesForm(initial={'personal': personal})
factores_form = FactoresForm(initial={'personal': personal})
fundamentos_form = FundamentosForm(initial={'personal': personal})
context = {
'personal': personal,
'fundamentos_form': fundamentos_form,
'factores_form': factores_form,
'calificacion_form': calificacion_form,
}
return render(request, template_name, context)
вот мой шаблон 'calificar':
{% extends 'base.html' %}
{% block content %}
{% load crispy_forms_tags %}
<div>
<br />
<h2><b>Calificar</b></h2>
<br />
<div class="contenedor-formulario">
<form method="POST">
{% csrf_token %}
<div class="formularios">
<div class="personal">
<h3><b>Personal</b></h3>
{{ calificacion_form | crispy }}
</div>
<div class="factores">
<h3><b>Factores</b></h3>
{{ factores_form | crispy }}
</div>
<div class="fundamentos">
<h3><b>Fundamentos</b></h3>
{{ fundamentos_form | crispy }}
</div>
</div>
<h3 id="totalFactoresDisplay">Puntaje: 0</h3>
<input type="hidden" name="total_factores" id="totalFactoresInput" />
<div class="form_buttons">
<button type="submit" class='btn btn-primary px-5 btn-calificar'>Calificar</button>
<a href="{% url 'home' %}" class='btn btn-danger px-5 btn-calificar'>Cancelar</a>
</div>
</form>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const form = document.querySelector('form');
const totalField = document.getElementById('totalFactoresInput');
const factorInputs = form.querySelectorAll('input[name^="f"]');
const totalFactoresDisplay = document.getElementById('totalFactoresDisplay');
function calculateTotal() {
let total = 0;
factorInputs.forEach(input => {
total += parseInt(input.value) || 0;
});
totalField.value = total;
totalFactoresDisplay.textContent = `Total Factores: ${total}`;
}
factorInputs.forEach(input => {
input.addEventListener('input', calculateTotal);
});
calculateTotal();
});
</script>
{% endblock %}
А это мои урлы:
from django.urls import path
from .views import *
urlpatterns = [
path('', ingreso_calificador, name='ingreso'),
path('inicio', home, name='home'),
**path('calificar/<int:pk>', calificar, name='calificar'),**
path('inicio/deficiente', deficiente, name='deficiente'),
path('inicio/bueno', bueno, name='bueno'),
path('inicio/destacado', destacado, name='destacado'),
path('inicio/muy-destacado', muy_destacado, name='muy-destacado'),
path('inicio/ne', ne, name='ne'),
path('inicio/sanciones', sanciones, name='sanciones'),
path('inicio/confirmado', confirmado, name='confirmado'),
path('inicio/sin-confirmar', confirmado, name='sin-confirmar'),
path('inicio/oficiales', oficiales, name='oficiales'),
path('inicio/civiles', civiles, name='civiles'),
path('usuarios', usuarios, name='usuarios'),
path('usuarios-auditorias', usuarios_auditorias, name='usuarios-auditorias'),
path('roles', roles, name='roles'),
path('audits', auditorias, name='auditorias'),
path('auditorias/busquedasLU', auditorias_lu, name='auditorias-lu'),
path('auditorias/busquedasLU/1', auditorias_lu_usuarios, name='auditorias-lu-usuarios'),
]
Я ожидаю, что когда я подтверждаю содержимое формы, то перенаправляет меня на шаблон 'home', но когда я нажимаю кнопку de, не перенаправляет меня и не сохраняет в db, он говорит мне, что это проблема на сервере. Я пытался упростить код, но ничего не вышло