Problems checking if a field of type datefield does not match the format

Viewed 18

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")
0 Answers
Related