如何在创建相同对象 24 小时后删除对象

man*_*ani 0 database django django-models celery

我想在 24 小时后删除一个实例,因为该实例已创建如何使用 celery

创建实例后如何启动“TIMER”?

我想要像 Snapchat 这样的东西

Bor*_*cev 6

取决于规模和您的需求。

您将不得不使用 django-celery-beat 进行定期任务:http : //docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#beat-custom-schedulers

老实说,我会创建一个每 3-5 分钟运行一次的 celery 任务。

models.py

   class Foo(models.model):
       created_at = models.DateTimeField(auto_add_now=True)
       expiration_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

views.py

import datetime
from django.utils import timezone

def add_foo():
    # Create an instance of foo with expiration date now + one day
    Foo.objects.create(expiration_date=timezone.now() + datetime.timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)

tasks.py

from celery.schedules import crontab
from celery.task import periodic_task
from django.utils import timezone

@periodic_task(run_every=crontab(minute='*/5'))
def delete_old_foos():
    # Query all the foos in our database
    foos = Foo.objects.all()

    # Iterate through them
    for foo in foos:

        # If the expiration date is bigger than now delete it
        if foo.expiration_date < timezone.now():
            foo.delete()
            # log deletion
    return "completed deleting foos at {}".format(timezone.now())
Run Code Online (Sandbox Code Playgroud)