Décrémentation de la valeur du modèle à minuit dans Django
Je veux décrémenter la valeur days_till_study avec 1 tous les jours à minuit.
Mon approche actuelle n'est pas très élégante. Y a-t-il une meilleure manière de faire cela?
from django.db import models
from django.utils import timezone
class Card(models.Model):
question = models.CharField(max_length=100)
answer = models.TextField()
date = models.DateTimeField(default=timezone.now)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
decks = models.ManyToManyField(Deck)
days_till_study = models.IntegerField(default=1)
def __str__(self):
return self.question
def decrement_days_till_study(self):
if days_till_study < 1:
x = str(datetime.datetime.now())
if x[x[11:26]] == '00:00:00.000000':
days_till_study += 1
Merci d'avoir lu ceci.
Réponses
Calcul du résultat à la volée
Si vous avez le contrôle sur les éléments à stocker dans la base de données, il est préférable de stocker les deux jours dans la base de données et de calculer la différence en fonction de celle-ci:
class Card(models.Model):
created_at = models.DateTimeField()
study_at = models.DateTimeField()
@property
def days_till_study(self):
return (self.study_at - self.created_at).days
Planification via céleri
Si vous avez encore besoin de faire quelque chose selon un calendrier (comme une mise days_till_study
à jour à minuit), vous pouvez essayer la bibliothèque django-cron ou une autre solution basée sur Celery.
Planification via cron
En outre, vous pouvez créer une commande de gestion et l'exécuter selon une planification via le cron système .