Đang giảm giá trị mô hình lúc nửa đêm ở Django
Aug 17 2020
Tôi muốn giảm giá trị days_till_study xuống còn 1 ngày vào lúc nửa đêm.
Cách tiếp cận hiện tại của tôi không được thanh lịch cho lắm. Có cách nào tốt hơn để làm điều này?
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
Cảm ơn vì đã đọc cái này.
Trả lời
1 Gram Aug 17 2020 at 10:11
Đang tính toán kết quả
Nếu bạn có quyền kiểm soát những gì cần lưu trữ trong cơ sở dữ liệu, tốt hơn nên lưu trữ cả hai ngày trong cơ sở dữ liệu và tính toán sự khác biệt dựa trên nó:
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
Lên lịch qua Celery
Nếu bạn vẫn cần làm điều gì đó theo lịch trình (như cập nhật days_till_studylúc nửa đêm), bạn có thể thử thư viện django-cron hoặc một giải pháp dựa trên Cần tây khác.
Lập lịch qua cron
Ngoài ra, bạn có thể tạo một lệnh quản lý và chạy nó theo lịch trình thông qua cron hệ thống .