为了实现此功能,我使用了 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)
我的主要目标是删除创建日期早于今天的内容,这应该自动完成
您需要查看 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()