I am trying to make an app for the performance evaluation of workers by their boss. For this, there is a database with information on the workers, from which information such as the ID must be extracted, in such a way that to evaluate a worker, personal information must be passed as a parameter in the url of the form and The evaluation is displayed with some complete fields of personal information and 15 questions to answer and stored in a new table to later report on the data. A worker can have many evaluations, for example one monthly. However, I can't get it to work. At first I tried to do it with 2 models, but when it didn't work, I added a third one that would relate to the previous 2. I think the error is in view.py, can someone help me please? Models.py:
from django.db import models
# Create your models here.
nota= (
('25','Casi Nunca'),
('50','Algunas Veces'),
('75','Con Frecuencia'),
('100','Siempre'),
)
recomienda = (
('0', 'no'),
('100', 'si')
)
class Trabajador(models.Model):
nombre = models.TextField(max_length = 50, null=False)
codigo = models.TextField(max_length = 8, primary_key=True, null=False, unique=True)
rut = models.TextField(max_length = 10, null=False, unique=True)
cargo = models.TextField(max_length = 30, null=False)
cencos = models.IntegerField(null=False)
jefe = models.TextField(max_length = 50, null=False)
correo_jefe = models.EmailField(null=False)
evaluador = models.TextField(max_length = 50, null=False)
correo_evaluador = models.EmailField(null=False)
estado = models.IntegerField(null=False)
asistencia = models.IntegerField(null=False)
class Meta:
verbose_name="trabajador"
verbose_name_plural="trabajadores"
def __str__(self):
return self.rut
forms.py:
from django import forms
from .models import Trabajador, Encuesta, nota, recomienda
class EncuestaForm(forms.ModelForm):
class Meta:
model = Encuesta
fields=[
'pregunta1',
'pregunta2'
'pregunta3',
'pregunta4',
'pregunta5',
'pregunta6',
'pregunta7',
'pregunta8',
'pregunta9',
'pregunta10',
'pregunta11',
'pregunta12',
'pregunta13',
'pregunta14',
'pregunta15',
]
labels = {
'pregunta1':"Efectuar adecuadamente y según estándar esperado el mantenimiento y reparación de los equipos de trabajo dispuestos en cada obra.",
'pregunta2':"Registra óptimamente en las ordenes de trabajo (OT), el trabajo asignado y actividades ejecutadas, haciendo la entrega de esta a su supervisor de maquinaria.",
'pregunta3':"Posee conocimientos técnicos del equipo y sus sistemas en relación a los manuales técnicos y/o repuestos.",
'pregunta4':"Posee conocimientos en el correcto usos de las herramientas de trabajo, tanto manuales como electrónicas en relación al trabajo a desarrollar.",
'pregunta5':"Apropiado conocimiento en las unidades de medida y su equivalencia (Metodologías).",
'pregunta6':"Informa oportunamente a su supervisor, al momento de encontrar una desviación en relación al trabajo en ejecución y/o área de trabajo, con la finalidad de corregir y cumplir con la programación y/o la prevención de un posible accidente.",
'pregunta7':"Cumple y promueve acciones seguras en el ejecutar de su trabajo, cumpliendo óptimamente con el procedimiento asignado según la tarea especifica.",
'pregunta8':"Realiza correctamente su ART, paso a paso e inspección visual de sus área de trabajo con la finalidad de encontrar una condición de riesgo y prever un accidente.",
'pregunta9':"Pensamiento Analítico: Es la capacidad para entender una situación, disgregándola en pequeñas parte, identificando sus implicaciones paso a paso. También incluye el entendimiento de las secuencias temporales y las relaciones causa-efecto de las acciones.",
'pregunta10':"Aversión al Riesgo: Capacidad para discriminar situaciones potencialmente peligrosas, de atención, concentración y alerta, por lo que se hace necesaria en aquellos puestos de trabajo que están expuestos a riesgo de accidentes.",
'pregunta11':"Energía: Capacidad de trabajar arduamente en diferentes situaciones, constantemente cambiantes o con participantes muy diversos. A pesar de que la jornada laboral en la cual se trabaje sea prolongada, las personas con esta capacidad no se ven afectadas en cuanto a su nivel de energías y efectividad.",
'pregunta12':"Denota responsabilidad y compromiso, en cuanto a sus obligaciones, inicio y/o cambios de turno.",
'pregunta13':"Logra mantener buen nivel de relación interpersonal con sus equipo de trabajo, y/o los de otras áreas del contrato.",
'pregunta14':"Logra recibir y ejecutar adecuadamente las instrucciones y/o Re instrucciones entregadas por su jefatura, logrando tener una comportamiento esperado.",
'pregunta15':"Usted recomendaria que este trabajador continue en nuevos proyectos en la empresa.",
}
widgets = {
'pregunta1':forms.ChoiceField(choices = nota),
'pregunta2':forms.ChoiceField(choices = nota),
'pregunta3':forms.ChoiceField(choices = nota),
'pregunta4':forms.ChoiceField(choices = nota),
'pregunta5':forms.ChoiceField(choices = nota),
'pregunta6':forms.ChoiceField(choices = nota),
'pregunta7':forms.ChoiceField(choices = nota),
'pregunta8':forms.ChoiceField(choices = nota),
'pregunta9':forms.ChoiceField(choices = nota),
'pregunta10':forms.ChoiceField(choices = nota),
'pregunta11':forms.ChoiceField(choices = nota),
'pregunta12':forms.ChoiceField(choices = nota),
'pregunta13':forms.ChoiceField(choices = nota),
'pregunta14':forms.ChoiceField(choices = nota),
'pregunta15':forms.ChoiceField(choices = recomienda),
}
trabajador_form.html:
{% extends 'evaluacion/base.html' %}
{% block content %}
<hr>
<h1><strong>Trabajador: {{trabajador.nombre}}</strong></h1><br>
<h2 class="section-heading-lower"><strong>Código:</strong> {{trabajador.codigo}}</h2>
<h2 class="section-heading-upper"><strong>Rut:</strong> {{trabajador.rut}}</h2>
<h2 class="section-heading-upper"><strong>Cargo:</strong> {{trabajador.cargo}}</h2>
<h2 class="section-heading-upper"><strong>Centro de Costo:</strong> {{trabajador.cencos}}</h2>
<h2 class="section-heading-upper"><strong>Porcentaje de Asistencia:</strong> {{trabajador.asistencia}}%</h2>
<hr>
<script>
function draw() {
var canvas = document.getElementById('prueba');
if (canvas.getContext) {
var ctx = canvas.getContext('2d'); } }
</script>
<style>
canvas { border: 1px solid black; }
</style>
<script>
//Cuadro de diálogo de confirmación en JavaScript
function confirmarReset()
{
return confirm("¿Está seguro que desea eliminar todos los registros?");
}
</script>
<hr>
<form action="trabajador_list.html" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<button type="submit">Guardar</button>
<button type="reset" onclick="return confirmarReset()">Reiniciar</button>
</form>
{% endblock %}
views.py:
class evaluacion_view(ListView):
model = Encuesta
template_name = 'trabajador/trabajador_list.html'
class evaluacion_create(CreateView):
model = Encuesta
template_name = 'trabajador/trabajador_list.html'
form_class = EncuestaForm
second_form_class = NameForm
success_url = 'http://localhost:8000/trabajador/trabajador_edit/1/'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if 'form' not in context:
context['form'] = self.form_class()
if 'form2' not in context:
context['form2'] = self.second_form_class()
return context
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
form2 = self.second_form_class(request.POST)
if form.is_valid() and form2.is_valid():
evaluacion = form.save(commit=False)
trabajador = form2.save()
evaluacion.trabajador = trabajador
evaluacion.save()
return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response(self.get_context_data(form=form, form2=form2))
class evaluacion_update(UpdateView):
model = Encuesta
second_model = Trabajador
form_class = EncuestaForm
second_form_class = NameForm
template_name = 'trabajador/trabajador_form.html'
success_url = 'http://localhost:8000/trabajador/trabajador_edit/1/'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
pk = self.kwargs.get('pk', 0)
evaluacion = self.model.objects.get(id=pk)
trabajador = self.second_model.objects.get(id=evaluacion.trabajador) # Update this line
if 'form' not in context:
context['form'] = self.form_class()
if 'form2' not in context:
context['form2'] = self.second_form_class(instance=trabajador)
context['id'] = pk
return context
def post(self, request, *args, **kwargs):
id_encuesta = kwargs['pk']
evaluacion = self.model.objects.get(id=id_encuesta)
trabajador = self.second_model.objects.get(id=evaluacion.rut) # Update this line
form = self.form_class(request.POST, instance=evaluacion)
form2 = self.second_form_class(request.POST, instance)
urls.py
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from trabajador.views import evaluacion_view, evaluacion_create, evaluacion_update
from trabajador import views
urlpatterns = [
path("trabajador_list/", evaluacion_view.as_view(), name="trabajador_list"),
path("trabajador_create/", evaluacion_create.as_view(), name="trabajador_create"),
path("trabajador_edit/<str:pk>/", evaluacion_update.as_view(), name="trabajador_edit"),
]