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- आधारित समाधान आज़मा सकते हैं।

क्रोन के माध्यम से निर्धारण

इसके अलावा, आप एक प्रबंधन कमांड बना सकते हैं और इसे सिस्टम क्रोन के माध्यम से अनुसूची द्वारा चला सकते हैं ।