Как отобразить измененные поля в Django Admin?
У меня есть модель Managers и прокси-модель MyManagers. Я пытаюсь отобразить измененное поле в панели администратора для прокси-модели, но Admin/history отображает только пользователя, дату и действие. Как это исправить?
Мой models.py
from django.db import models
from django.contrib import admin
from simple_history.models import HistoricalRecords
class Managers(models.Model):
name = models.CharField(max_length=30, default='')
lastname = models.CharField(max_length=30, default='')
enduser_id = models.CharField(max_length=8, default='', help_text=u"Please enter the end user id, like ABC1WZ1")
history = HistoricalRecords()
class Meta:
verbose_name = 'Manager'
verbose_name_plural = 'Managers'
def __str__(self):
return self.name + self.lastname
class ManagersAdmin(admin.ModelAdmin):
list_display= ('name','lastname','enduser_id')
class MyManagers(Managers):
class Meta:
proxy=True
def __str__(self):
return self.name.upper() +' '+self.lastname.upper()
class MyManagersAdmin(admin.ModelAdmin):
search_fields = ['name', 'lastname','enduser_id']
list_display = ('name', 'lastname','enduser_id')
history_list_display = ['name','lastname','enduser_id','changed_fields']
def changed_fields(self, obj):
if obj.prev_record:
var = obj.diff_against(obj.prev_record)
return var.changed_fields
return None
Мой admin.py:
from django.contrib import admin
from .models import *
# Additional board for assigning a manager to a Department.
admin.site.register(Managers, ManagersAdmin)
admin.site.register(MyManagers, MyManagersAdmin)
Я забыл добавить search_fields = ['name', 'lastname', 'enduser_id']
У меня была та же проблема, вы можете использовать метод ModelAdmin и использовать History Diffing для добавления пользовательского поля в таблицу истории изменений.
history_list_display = ['changed_fields']
def changed_fields(self, obj):
if obj.prev_record:
delta = obj.diff_against(obj.prev_record)
return delta.changed_fields
return None
Это сработало для меня.
