为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
相关产品推荐
相关产品推荐

