Как постоянно сохранять количество дней обратного отсчета в базе данных в django?

#python-3.x #django

#python-3.x #django

Вопрос:

Я разрабатываю веб-приложение для страхования автомобилей, куда клиент может прийти и заблокировать свою страховку в любое время, если у автомобиля возникнут проблемы. Я хотел бы считать ежедневно и сохранять в базе данных количество оставшихся дней, а также, если клиент блокирует свою страховку, я могу прекратить подсчет, пока он не придет, чтобы активировать его.

На данный момент я могу сохранить только тогда, когда клиент блокирует или разблокирует свою страховку с помощью функции изменения договора страхования. Вот функция контракта обновления:

 def ContratUpdate(request, id=None):
    context = {}
    detail = get_object_or_404(Contrat, id=id)
    contract = request.POST.get('numero_de_contrat')
    form = ContratAddFrom(request.POST or None, instance=detail)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        id = form.instance.id
        contrats=Contrat.objects.filter(numero_de_contrat=contract)
        for contrat in contrats:
            if contrat.statut_assurance =='Reprise':
                nb_Days = contrat.nombre_de_mois contrat.created.day-date.today().day
                contrat.remainingdays=nb_Days
                contrats.update(remainingdays=nb_Days)
            elif contrat.statut_assurance=='Suspendre':
                nb_Days = contrat.remainingdays contrat.created.day-contrat.modified.day
                contrat.remainingdays=nb_Days
                contrats.update(remainingdays=nb_Days)
        return redirect('assurance_auto:Contrat_Liste')
    else:
        form = ContratAddFrom(instance=detail)
    context["form"] = form
    return render(request, 'auto/UpdateContrat.html', context)
 

И это то, что я пытаюсь сделать в контрактной модели, чтобы решить мою проблему, но она не работает:

 class Contrat(models.Model):
    Statut_contrat = (
        ('Encours', 'Encours'),
        ('Suspendre', 'Suspendre'),
    )
    # numero_de_contrat = shortuuid.uuid()
    numero_de_contrat = models.CharField(max_length=10, unique=True, null=False, blank=False)
    statut_assurance =models.CharField(max_length=15, choices=Statut_contrat)
    vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE)
    Conducteur = models.CharField(max_length=200)
    utilisateur = models.ForeignKey(User, on_delete=models.CASCADE)
    nombre_de_mois = models.IntegerField()
    montant_du_contrat = models.DecimalField(max_digits=10, decimal_places=2)
    categorie = models.ForeignKey(Categorie_Contrat, on_delete=models.CASCADE)
    created = models.DateField(auto_now_add=True)
    modified = models.DateField(auto_now=True)
    active = models.BooleanField(default=True)
    remainingdays=models.IntegerField(null=True)

    def __str__(self):
        return self.numero_de_contrat

    def activeStatus(self):
        if self.nombre_de_mois==0:
            return self.active==False
        else:
            return self.active==True

    def save(self, *args, **kwargs):
        # self.remainingdays = self.nombre_de_mois
        if self.statut_assurance=='Suspendre':
            currente_date = self.remainingdays self.created.day - self.modified.day
            print(currente_date)
            self.remainingdays=currente_date
            # super(Contrat,self).save(*args, **kwargs)
            # return self.modified
        else:
            # nb_Days = self.remainingdays - date.today().day   self.created.day # Ce bout de code fonctionne à moitiés
            # self.remainingdays=self.nombre_de_mois
            nb_Days = self.remainingdays-date.today().day
            self.remainingdaysays=nb_Days
       super(Contrat,self).save(*args,**kwargs)
 

Обратите внимание, что наиболее важными полями для моего issu являются nombre_de_mois и remainingdays .
nombre_de_mois Это продолжительность контракта.
Кто-нибудь может помочь, пожалуйста?

Комментарии:

1. Вы переопределяете save, но на самом деле ничего не сохраняете, вызывая super().save() .

2. Возможно, было бы проще сохранить дату окончания блока; таким образом, вы можете вычислить количество дней, когда вам это нужно, без необходимости что-либо менять в БД.

3. Я добавил super(Contrat,self).save(* args,** kwargs) в конце функции, но из оператора if, но все равно ничего не меняет в базе данных

4. @Melvyn, пожалуйста, проверьте это сейчас