You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Django Error模型添加Admin端可配置错误存储上限功能

实现Admin可配置的错误记录上限

1. 添加全局配置模型

首先在models.py中新增单例配置模型,用于存储可动态修改的错误记录上限:

from django.db import models
from django.utils import timezone

class ErrorSettings(models.Model):
    max_errors = models.PositiveIntegerField(default=50, verbose_name="最大错误记录数")
    
    class Meta:
        verbose_name = "错误记录配置"
        verbose_name_plural = "错误记录配置"
    
    def __str__(self):
        return f"错误记录上限: {self.max_errors}"
    
    @classmethod
    def get_current_settings(cls):
        # 获取或创建唯一配置记录
        settings, created = cls.objects.get_or_create(pk=1)
        return settings

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)

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

    class Meta:
        ordering = ['-created_at']  # 按创建时间倒序排列

    @classmethod
    def check_and_trim(cls):
        # 从配置模型读取上限值,默认50
        max_errors = ErrorSettings.get_current_settings().max_errors
        # 获取所有错误记录并倒序排列
        errors = cls.objects.all().order_by('-created_at')
        # 超过上限时批量删除最早的记录
        if errors.count() > max_errors:
            errors_to_delete = errors[max_errors:]
            cls.objects.filter(id__in=[err.id for err in errors_to_delete]).delete()

2. 配置Admin后台

修改admin.py,注册配置模型并给Error列表页添加快速配置入口:

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import Error, ErrorSettings

class ErrorAdmin(admin.ModelAdmin):
    list_display = ('user_mail', 'error_type', 'error_message', 'error_message_detail', 'created_at', 'config_link')
    
    def config_link(self, obj):
        # 生成跳转到配置页的链接,替换yourappname为你的应用名称
        url = reverse('admin:yourappname_errorsettings_change', args=[1])
        return format_html('<a href="{}">修改错误记录上限</a>', url)
    config_link.short_description = "配置操作"

class ErrorSettingsAdmin(admin.ModelAdmin):
    fields = ['max_errors']
    # 限制仅能修改唯一配置,禁止新增/删除
    def has_add_permission(self, request):
        return False
    
    def has_delete_permission(self, request, obj=None):
        return False

admin.site.register(Error, ErrorAdmin)
admin.site.register(ErrorSettings, ErrorSettingsAdmin)

3. 数据库迁移

执行命令更新数据库结构:

python manage.py makemigrations
python manage.py migrate

效果说明

  • Admin后台会新增「错误记录配置」选项,进入即可修改最大错误存储数
  • Error列表页每条记录后都有「修改错误记录上限」链接,可快速跳转配置
  • check_and_trim方法会自动读取最新配置值,无需修改代码重启服务

内容的提问来源于stack exchange,提问作者Linux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:12:44