在 django 数据库中创建 15 天后自动删除项目

问题描述 投票:0回答:1

为了实现此功能,我使用了 Django Signals,但这在我的情况下不起作用,请告诉我我是否做得正确,您也可以建议我任何其他方式来实现此功能

信号.py

from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django.utils import timezone
from smart_search.models import UserHitCount

@receiver(pre_delete, sender=UserHitCount)
def delete_user_hit_count(sender, instance, **kwargs):
    print("signal handler triggered!")
    if timezone.now() - instance.created_at > timezone.timedelta(minutes=1):
        instance.user.delete()

应用程序.py

from django.apps import AppConfig

class SmartSearchConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'smart_search'

    def ready(self):
        from . import signals

init.py

default_app_config = 'smart_app.apps.SmartAppConfig'

模型.py

from django.db import models
from user_application.models import Registered_user

class UserHitCount(models.Model):
    user = models.OneToOneField(Registered_user, on_delete=models.CASCADE)
    search_count = models.IntegerField(default=0)
    question_count = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True, null=True)

我的主要目标是删除创建日期早于今天的内容,这应该自动完成

python django orm
1个回答
0
投票

您需要查看 cronjobs 或后台任务队列。以芹菜为例: https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html

创建一个定期任务,每天或每小时运行一次,检查是否有需要删除的记录;

示例:

@shared_task
def example_task():
    UserModel.objects.filter(created_at__lte = now() - timedelta(days=15)).delete()
© www.soinside.com 2019 - 2024. All rights reserved.