Diminuindo o valor do modelo à meia-noite em Django
Aug 17 2020
Quero diminuir o valor days_till_study com 1 todos os dias à meia-noite.
Minha abordagem atual não é muito elegante. Existe uma maneira melhor de fazer isso?
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
Obrigado por ler isso.
Respostas
1 Gram Aug 17 2020 at 10:11
Calculando o resultado na hora
Se você tem controle sobre o que armazenar no banco de dados, é melhor armazenar os dois dias no banco de dados e calcular a diferença com base nele:
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
Agendamento via Aipo
Se você ainda precisa fazer algo de acordo com uma programação (como atualizar days_till_study
à meia-noite), você pode tentar a biblioteca django-cron ou outra solução baseada em Celery.
Agendamento via cron
Além disso, você pode criar um comando de gerenciamento e executá-lo por meio de uma programação por meio do cron do sistema .
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas