I would like some help with the following problem. I am trying to verify the dates that match certain parameters, the problem is that the maintenance_previous field may be empty, but how do I verify that it meets the following two conditions that is equal to or less than the current day but greater than the date of purchase.
Models.py
class Impresora(models.Model):
id_impresora=models.AutoField(primary_key=True)
ns=models.CharField(unique=True, max_length=30, blank=False, null=False)
id_modelo=models.ForeignKey("Modelo", on_delete=models.CASCADE)
folio=models.CharField(max_length=15, blank=True, null=True, default="N/A")
id_departamento=models.ForeignKey("Departamento", on_delete=models.CASCADE)
perioricidad = models.IntegerField(blank=True, null=True, default=6,verbose_name="Perioricidad del mantenimiento")
compra = models.DateField (auto_now=False , auto_now_add=False, blank=True, null=True, verbose_name="Fecha de compra")
anterior_mantenimiento = models.DateField (auto_now=False , auto_now_add=False, blank=True, null=True, verbose_name="Fecha del anterior mantenimiento")
siguiente_mantenimiento = models.DateField (auto_now=False , auto_now_add=False, blank=False, null=False, verbose_name="Fecha del siguiente mantenimiento")
activo=models.BooleanField(default=True)
class Meta:
verbose_name ="Impresora"
verbose_name_plural ="Impresoras"
ordering=["ns"]
def __str__(self):
return f"{self.ns} {self.id_modelo}"
Forms.py
class ImpresoraForm(forms.ModelForm):
id_departamento = forms.ModelChoiceField(queryset=Departamento.objects.filter(activo=True))
id_modelo = forms.ModelChoiceField(queryset=Modelo.objects.filter(activo=True))
def __init__(self, *args, **kwargs):
super(ImpresoraForm, self).__init__(*args,**kwargs)
self.fields['ns'].widget.attrs['class'] = 'form-control'
self.fields['ns'].widget.attrs['placeholder'] = 'Numero serial'
self.fields['id_modelo'].widget.attrs['class'] = 'form-control'
self.fields['id_modelo'].widget.attrs['placeholder'] = 'Modelo de la impresora'
self.fields['folio'].widget.attrs['class'] = 'form-control'
self.fields['folio'].widget.attrs['placeholder'] = 'Folio de la impresora'
self.fields['id_departamento'].widget.attrs['class'] = 'form-control'
self.fields['id_departamento'].widget.attrs['placeholder'] = 'Area instalada en la que esta instalada la impresora'
self.fields['perioricidad'].widget.attrs['class'] = 'form-control'
self.fields['perioricidad'].widget.attrs['placeholder'] = 'Periodo prefijado entre mantenimientos'
self.fields['compra'].widget.attrs['class'] = 'form-control'
self.fields['compra'].widget.attrs['placeholder'] = 'Fecha de compra'
self.fields['anterior_mantenimiento'].widget.attrs['class'] = 'form-control'
self.fields['anterior_mantenimiento'].widget.attrs['placeholder'] = 'Anterior mantenimiento'
self.fields['siguiente_mantenimiento'].widget.attrs['class'] = 'form-control'
self.fields['siguiente_mantenimiento'].widget.attrs['placeholder'] = 'Siguiente mantenimiento'
class Meta:
model = Impresora
fields = [
"ns", "id_modelo",
"folio", "id_departamento",
"perioricidad", "compra",
"anterior_mantenimiento",
"siguiente_mantenimiento",
]
labels={
"ns":"Numero serial de la impresora",
"id_modelo": "Modelo de la impresora",
"folio":"Folio de la impresora",
"area":"Area en la que esta instalada la impresora",
"perioricidad" : "Meses entre mantenimiento",
"compra": "Fecha en la que se compro la computadora",
"anterior_mantenimiento":"Fecha del anterior mantenimiento",
"siguiente_mantenimiento":"Fecha del siguiente mantenimiento",
}
Views.py
The error is as follows: time data '' does not match format '%Y-%m-%d'.And it is in the following line: **temp_anterior_mantenimiento=datetime.strptime(request.POST.get("anterior_mantenimiento"), "%Y-%m-%d") **
class RegistraImpresora1(CreateView):
model=Impresora
form_class=ImpresoraForm
template_name="impresoras/crear_impresora.html"
success_url=reverse_lazy("equipo:listar_impresoras")
def post(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
fundacion=datetime(2017, 1, 1)
hoy=datetime.today()
form = self.form_class(request.POST)
temp_compra=datetime.strptime(request.POST.get("compra"), "%Y-%m-%d")
hoy=datetime.today()
bandera, bandera2, temp_anterior_mantenimiento = None, None, None
if request.POST.get("anterior_mantenimiento") == None:
bandera2 = False
else:
temp_anterior_mantenimiento=datetime.strptime(request.POST.get("anterior_mantenimiento"), "%Y-%m-%d")
if temp_anterior_mantenimiento.time()>=temp_compra.time() and temp_anterior_mantenimiento.time()<=hoy.time():
bandera2 = True
else:
bandera2=False
temp_siguiente_mantenimiento=datetime.strptime(request.POST.get("siguiente_mantenimiento"), "%Y-%m-%d")
bandera1 = True if temp_compra.time()>=fundacion.time() and temp_compra.time()<=hoy.time() else False
bandera3 = True if temp_siguiente_mantenimiento.time()<=hoy.time() else False
bandera = True if bandera1 and bandera2 and bandera3 else False
if form.is_valid():
if bandera:
if request.POST.get("anterior_mantenimiento") == None:
nueva_impresora=Impresora(
ns=request.POST.get("ns"),
id_modelo=form.cleaned_data.get("id_modelo"),
folio=request.POST.get("folio"),
id_departamento=form.cleaned_data.get("id_departamento"),
perioricidad=request.POST.get("perioricidad"),
anterior_mantenimiento=request.POST.get("anterior_mantenimiento"),
siguiente_mantenimiento=request.POST.get("siguiente_mantenimiento")
)
else:
nueva_impresora=Impresora(
ns=request.POST.get("ns"),
id_modelo=form.cleaned_data.get("id_modelo"),
folio=request.POST.get("folio"),
id_departamento=form.cleaned_data.get("id_departamento"),
perioricidad=request.POST.get("perioricidad"),
compra=form.cleaned_data.get("compra"),
anterior_mantenimiento=request.POST.get("anterior_mantenimiento"),
siguiente_mantenimiento=request.POST.get("siguiente_mantenimiento")
)
nueva_impresora.save()
return redirect("equipo:listar_impresoras")
else:
return redirect("equipo:crear_impresora")