Добавление фильтра в модуль Django
Я работаю в проекте 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
вы могли ввести, сколько ошибок вы хотите сохранить.
Вы не можете сделать это здесь, и эта обработка просматривает записи в базе данных и, по вашим словам, вы удаляете самые старые, чтобы поместить новую ошибку, так что у вас нет более 50 записей.
Это должно быть сохранено в вашем файле настроек, а чтобы сотрудники могли его изменить, используйте пакет django-constance для управления этим.
На заметку: Sentry будет намного лучше в этом, и он дает много информации о запросе и переменных. Кроме того, вы можете размещать данные самостоятельно (бесплатно), если не хотите отправлять данные пользователей за пределы своей инфраструктуры.