向 Django 模块添加过滤器

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

我正在从事 Django 项目。我创建了一个模型来保存最近发生的 50 个错误。

models.py

class Error(models.Model):
    ERROR_TYPE_CHOICES = [
        ('ERROR', 'ERROR'),
        ('WARNING', 'WARNING'),
    ]
    user_mail = models.CharField(max_length=500, blank=True, null=True)
    error_type = models.CharField(max_length=7, choices=ERROR_TYPE_CHOICES)
    error_message = models.CharField(max_length=1000, blank=True, null=True)
    error_message_detail = models.CharField(max_length=500, blank=True, null=True)
    created_at = models.DateTimeField(default=timezone.now)

    # Static field for maximum errors limit
    max_errors = 50

    def __str__(self):
        return f"{self.error_type}: {self.error_message}"

    class Meta:
        ordering = ['-created_at']  # Order by descending creation date

    @classmethod
    def check_and_trim(cls):
        # # Obtain all errors ordered by creation date
        errors = cls.objects.all().order_by('-created_at')
        # If there are more than 50 errors, delete the older ones
        if errors.count() > cls.max_errors:
            errors_to_delete = errors[cls.max_errors:]
            for error in errors_to_delete:
                error.delete()

admin.py

class ErrorAdmin(admin.ModelAdmin):
    list_display = ('user_mail', 'error_type', 'error_message', 'error_message_detail', 'created_at')

admin.site.register(Error, ErrorAdmin)

正如您所看到的,当错误超过 50 个时,最旧的错误将被删除,以便保存新的错误。

将来可能需要保存超过 50 个错误,所以我现在不想更改代码,而是想添加一个功能,这样在

localhost:8000/admin/Error
中,您可以输入要保存的错误数量。

Here you can see what I want to do

django django-models django-admin
1个回答
0
投票

您不能在此处执行此操作,并且此处理会查看数据库中的记录,并根据您删除最旧的记录来放置新错误,因此您的记录不会超过 50 条。

这需要保存在您的设置文件中,并允许工作人员更改它,请使用 django-constance 包来管理它。

顺便说一句,Sentry 在这方面会更好,它提供了很多有关请求和变量的见解。此外,如果您不想发送用户数据,您可以自行托管(免费)您的基础设施。

© www.soinside.com 2019 - 2024. All rights reserved.