Django:如何每天自动将数据从Consumer_order插入到Daily_Cart?

问题描述

一次输入以将项目放入Customer_order。它必须自动插入并保存,才能保存Daily_Cart。

class Consumer_order(models.Model):
  name  = models.ForeignKey(Consumer,on_delete=models.CASCADE)
  ac_no = models.CharField(max_length=32)
  newspaper = models.ManyToManyField(Newspaper,related_name="Consumer_ac_no")
  added_date = models.DateField(max_length=32,auto_Now_add=True)
    
  def __str__(self):
     return str(self.ac_no)


class Daily_Cart(models.Model):
      ac_no = models.ForeignKey(Consumer_order,on_delete=models.DO_nothing)
      newspaper = models.ManyToManyField(Consumer_order,related_name="Consumer_ac_no")
      added_date  = models.DateTimeField(max_length=32,auto_Now_add=True)
      
      def __str__(self):
          return str(self.added_date)
        
      def start(self,*args,**kwargs):
          date_object = datetime.date.today()
          crontab(minute=30,hour='7',day_of_week='mon,tue,wed,thu,fri,sat,sun')
          self.ac_no = self.Consumer_order.ac_no
          self.newspaper = self.Consumer_order.newspaper 
          super(Daily_Cart,self).start(*args,**kwargs)
          scheduler.start()

解决方法

为此,您可以编写cron脚本。 很简单请按照以下步骤操作:

安装 APScheduler python库。

pip install APScheduler==3.6.3

在Django应用(与model.py所在的目录相同)中创建 updater.py insert_data_script.py

在insert_data_script.py中定义一个方法,使用该方法,Consumer_order的所有数据都将传输到Daily_Cart。我们称 transfer_daily_data 为方法名称

updater.py

中定义cron作业
from apscheduler.schedulers.background import BackgroundScheduler
from .insert_data_script import transfer_daily_data


def start():
    scheduler = BackgroundScheduler()
    scheduler.add_job(transfer_daily_data,'cron',hour=1) # This script will run every day on 1 am (UTC time)
    scheduler.start()

有关更多信息,您可以关注官方documentation