Penurunan nilai model pada tengah malam di Django
Aug 17 2020
Saya ingin menurunkan nilai days_till_study dengan 1 setiap hari pada tengah malam.
Pendekatan saya saat ini tidak terlalu elegan. Apakah ada cara yang lebih baik untuk melakukan ini?
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
Terima kasih telah membaca ini.
Jawaban
1 Gram Aug 17 2020 at 10:11
Menghitung hasil dengan cepat
Jika Anda memiliki kendali atas apa yang harus disimpan dalam database, lebih baik menyimpan kedua hari di database dan menghitung perbedaan berdasarkan itu:
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
Penjadwalan melalui Celery
Jika Anda masih perlu melakukan sesuatu berdasarkan jadwal (seperti memperbarui days_till_study
pada tengah malam) Anda dapat mencoba perpustakaan django-cron atau solusi berbasis Celery lainnya.
Penjadwalan melalui cron
Selain itu, Anda dapat membuat perintah manajemen dan menjalankannya berdasarkan jadwal melalui cron sistem .
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'