Good morning
I have a question about the filters for dates, I have a model called Absenteeism that has an attribute "start_date" and an "end_date", and I have problems with the filter of a query to create some graphs.
For example, I have a record of absenteeism with start_date = June 1, 2016 and end_date = June 3. If I make an inquiry from June 1 to 3 I get absenteeism and I can count the days, but if I do the consultation from 1 to 2, I get an empty list.
Could you please, in addition to helping me, also clarify about the use of modifiers in the filter as date__lt, date__gt, date__lte, date__gte? There's others? Is there a range?
My models.py
class AusentismoBase(Novedad):
fecha_inicio = models.DateField(verbose_name="Fecha Inicial")
fecha_fin = models.DateField(verbose_name="Fecha Final")
mes = models.IntegerField(validators=[no_negativo])
quincena = models.IntegerField(validators=[no_negativo])
hora_inicio = models.TimeField(verbose_name="Hora Inicial", blank=True, null=True)
hora_fin = models.TimeField(verbose_name="Hora Final", blank=True, null=True)
motivo = models.IntegerField(choices=MOTIVOS_AUSENTISMO, verbose_name="Motivo de Ausentismo")
tipo_inc = models.IntegerField(choices=TIPOS_INCAPACIDAD, verbose_name="Tipo de Incapacidad", blank=True, null=True)
eps = models.ForeignKey(Eps)
arl = models.ForeignKey(Arl)
edad = models.IntegerField(validators=[no_negativo])
salario = models.IntegerField(validators=[no_negativo])
def __unicode__(self):
return (u"Ausentismo %s: (%s - %s)"%(self.persona, self.motivo, self.fecha_inicio)).strip() or "-"
class Meta:
unique_together = (("persona", "fecha_inicio"),)
My views.py
def ausentismo_motivos_area_fechas(request, idArea=None, fechai=None, fechaf=None):
resultado = iniciarResultadoTupla(MOTIVOS_AUSENTISMO)
ausentismos = []
form = AreaFechasForm()
if request.method == 'POST':
form = AreaFechasForm(request.POST)
if form.is_valid():
area = form.cleaned_data['area']
fechai = form.cleaned_data['fechai']
fechaf = form.cleaned_data['fechaf']
return redirect('ausentismo_motivos_area_fechas', area.id, fechai, fechaf)
if idArea and fechai and fechaf:
idArea = int(idArea)
area = Area.objects.get(id=idArea)
fechai = moddate.strptime(fechai, '%Y-%m-%d').date()
fechaf = moddate.strptime(fechaf, '%Y-%m-%d').date()
ausentismos = AusentismoBase.objects.filter(area=area, fecha_inicio__gte=fechai, fecha_fin__lte=fechaf)
print(ausentismos)
for a in ausentismos:
i = a.motivo - 1
x = a.fecha_inicio.day
y = a.fecha_fin.day
for m in range(x, y+1):
resultado[i] = llenarDatos(resultado[i], a.persona)
form = AreaFechasForm(initial={'area':idArea, 'fechai':fechai, 'fechaf':fechaf})
fila_0 = ['Motivo de Ausencia', 'B', 'C']
graficas = [6, 4, 5]
return render(request, 'plantilla_tipoempl.html', {
'nombreGrafica': "Ausentismos Motivos Areas",
'ejey': "Núm. Ausentismos",
'ejex': "Motivos de Ausentismos",
'resultadoJSON': json.dumps(resultado),
'tipoEstadistica': "Ausentismos", #Clasificación de Estadísticas
'resultado': resultado,
'graficas': graficas,
'fila_0': fila_0,
'form': form,
'filtro': "rango de fechas", #Sub Clasificación
'ausentismos': ausentismos,
})