#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, пожалуйста, проверьте это сейчас