Abnehmender Modellwert um Mitternacht in Django

Aug 17 2020

Ich möchte den Wert days_till_study jeden Tag um Mitternacht um 1 verringern.

Mein aktueller Ansatz ist nicht sehr elegant. Gibt es einen besseren Weg, dies zu tun?

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

Danke, dass Sie dies gelesen haben.

Antworten

1 Gram Aug 17 2020 at 10:11

Berechnung des Ergebnisses im laufenden Betrieb

Wenn Sie die Kontrolle darüber haben, was in der Datenbank gespeichert werden soll, ist es besser, beide Tage in der Datenbank zu speichern und die Differenz basierend darauf zu berechnen:

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

Planung über Sellerie

Wenn Sie nach einem Zeitplan noch etwas tun müssen (z. B. days_till_studyum Mitternacht aktualisieren ), können Sie die Django-Cron- Bibliothek oder eine andere Sellerie-basierte Lösung ausprobieren .

Planung über Cron

Sie können auch einen Verwaltungsbefehl erstellen und nach einem Zeitplan über das System cron ausführen .