การลดมูลค่าโมเดลในเวลาเที่ยงคืนใน Django
Aug 17 2020
ฉันต้องการลดค่า days_till_study ด้วย 1 ทุกวันตอนเที่ยงคืน
แนวทางปัจจุบันของฉันไม่สวยหรูมาก มีวิธีที่ดีกว่านี้หรือไม่?
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หรือโซลูชันอื่นที่ใช้ผักชีฝรั่ง
การตั้งเวลาผ่าน cron
นอกจากนี้คุณยังสามารถสร้างคำสั่งการจัดการและเรียกใช้โดยการผ่านระบบcron