首页 > 解决方案 > 如何在 django-simple-history 的 history_list_display 中引用外键?

问题描述

我已将 HistoricalRecords 添加到 django 中的模型中。

我能够使用history_list_display属性在管理面板的历史记录页面中显示列。

在这些列中,我有可以employeehistory_list_display属性元组中显示的员工。但是当我尝试对employee__person__person_name其他表进行 ForeignKey 引用时,它显示的是None.

如何在 django admin 的历史记录页面中显示 ForeignKey 参考值?

标签: djangoforeign-keysdjango-admindjango-admin-toolsdjango-simple-history

解决方案


保存对象的历史版本时django-simple-history,它通过删除对其外键的任何外键约束来实现(这样当您删除历史记录指向的对象时,历史记录不受影响)。做django-simple-history处理外键的方式,你不能做你通常可以在 django admin 中做的双下划线查询类型。相反,您可以自己查询对象,如下所示:

@register(Employee)
class EmployeeAdmin(SimpleHistoryAdmin):
    list_display = [...]
    history_list_display = ["get_employee_name", "get_employee_manager_name"]

    def get_employee_name(self, obj):
        obj.person.name

    def get_employee_manager_name(self, obj):
        return Employee.objects.filter(pk=obj.employee.id).first().manager.person.person_name

推荐阅读