Django에서 자정에 모델 값 감소

Aug 17 2020

매일 자정에 1로 days_till_study 값을 줄이고 싶습니다.

나의 현재 접근 방식은 그다지 우아하지 않습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

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

읽어 주셔서 감사합니다.

답변

1 Gram Aug 17 2020 at 10:11

즉석에서 결과 계산

데이터베이스에 저장할 항목을 제어 할 수있는 경우 데이터베이스에 두 날짜를 모두 저장하고 이에 따라 차이를 계산하는 것이 좋습니다.

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

셀러리를 통한 예약

그래도 일정에 따라 작업을 수행해야하는 경우 (예 days_till_study: 자정에 업데이트 ) django-cron 라이브러리 또는 다른 Celery 기반 솔루션을 사용해 볼 수 있습니다 .

크론을 통한 예약

또한 관리 명령을 만들고 시스템 cron을 통해 일정에 따라 실행할 수 있습니다 .