Django'da gece yarısı model değerini düşürme

Aug 17 2020

Days_till_study değerini her gün gece yarısı 1 ile azaltmak istiyorum.

Şu anki yaklaşımım pek zarif değil. Bunu yapmanın daha iyi bir yolu var mı?

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

Bunu okuduğunuz için teşekkürler.

Yanıtlar

1 Gram Aug 17 2020 at 10:11

Sonucu anında hesaplamak

Veritabanında nelerin saklanacağını kontrol ediyorsanız, her iki günü de veritabanında saklamak ve farkı buna göre hesaplamak daha iyidir:

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

Kereviz ile Planlama

Hala bir programa göre bir şeyler yapmanız gerekiyorsa ( days_till_studygece yarısı güncelleme gibi ), django-cron kitaplığını veya başka bir Kereviz tabanlı çözümü deneyebilirsiniz .

Cron ile planlama

Ayrıca, bir yönetim komutu oluşturabilir ve bunu sistem cronu aracılığıyla bir zamanlamaya göre çalıştırabilirsiniz .