Django admin list_display 不显示模型方法返回项

Posted

技术标签:

【中文标题】Django admin list_display 不显示模型方法返回项【英文标题】:Django admin list_display is not displaying model method return item 【发布时间】:2021-06-06 21:57:28 【问题描述】:

我无法让 admin 的 list_display 显示来自模型方法的信息,但相同的方法在更改页面的字段集中可以正常显示。我想我已经修复了关于这个主题的其他问题/答案中存在的所有错误,但我似乎无法弄清楚我做了什么。任何帮助将不胜感激。

管理员:

class StudentAdminConfig(admin.ModelAdmin):
    list_dispaly = ('name', 'get_total_funds')
    fieldsets=(
        (None, 'fields': ('name', 'get_total_funds')),
    )
    readonly_fields = ('get_total_funds',)

admin.site.register(Student, StudentAdminConfig)

型号: (注意:还有另一个模型 FundsEvent 与 Student 具有多对多关系)

class Student(models.Model):

    name = models.CharField(max_length=255)

    def get_total_funds(self):
        events = self.get_funds_events()
        total = float(0)
        for event in events:
            if event.income:
                total += float(event.amount)
            else:
                total -= float(event.amount)
        return f'$total:.2f'
    get_total_funds.short_description = "Total Funds"

    def get_funds_events(self):
        return FundsEvent.objects.filter(students_attended=self)

    def __str__(self):
        return self.name

关于这个 list_display 问题的烦人之处在于它没有给出任何我可以追溯的错误,它只是显示没有“总资金”列的页面。 另外,我在这方面投入了很多时间,它甚至不是一个重要的功能,只是对我来说很方便,因为我实际上是唯一一个会在这个特定项目上看到这个显示的人,但我我投入的足够多,我真的很想弄清楚,哈哈。

再次感谢您。

【问题讨论】:

list_dispaly 中的错字? 【参考方案1】:

它对我有用..

from django.contrib import admin
from .models import Student
class StudentAdminConfig(admin.ModelAdmin):
    list_display = ['name', 'email', 'phone']

这应该与 StudentAdminConfig 一起使用

admin.site.register(Contact, StudentAdminConfig)

【讨论】:

【参考方案2】:

如果你改正错字会发生什么

class StudentAdminConfig(admin.ModelAdmin):
    list_dispaly = ('name', 'get_total_funds')
    fieldsets=(
        (None, 'fields': ('name', 'get_total_funds')),
    )
    readonly_fields = ('get_total_funds',)

admin.site.register(Student, StudentAdminConfig)

实现它:

class StudentAdminConfig(admin.ModelAdmin):
    list_display = ('name', 'get_total_funds')
    fieldsets=(
        (None, 'fields': ('name', 'get_total_funds')),
    )
    readonly_fields = ('get_total_funds',)

admin.site.register(Student, StudentAdminConfig)

【讨论】:

哦,天哪...我知道这会很愚蠢。它是否可以帮助您将此列为正确答案,还是整体上更好地进行站点清理以删除问题?还有,谢谢。我在这上面花了太多时间。 别担心,拼写错误有时会影响到每个人!感谢您接受的答案。

以上是关于Django admin list_display 不显示模型方法返回项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django admin 中本地化 list_display 字段?

Django admin list_display 在鼠标悬停时显示全文

如何忽略在 django admin list_display 中加载巨大的字段?

Django admin:从反向 FK 聚合中排序 list_display 字段

Django Admin list_display 添加列[统计相关ForeignKey的记录]

从 django admin list_display 访问,来自一对一表的值