这是models.py的片段

class Applicant(models.Model):
    name = models.CharField(...)
    email = models.CharField(...)

class Application(models.Model):
    applicant = models.ForeignKey(Applicant)
    text = models.TextField(...)

这是我的admin.py:
class ApplicationAdmin(model.ModelAdmin):
    list_display = ['text', *******]

admin.site.register(Application, ApplicationAdmin)

在ApplicationAdmin中,我要显示申请人的姓名和电子邮件。

在问SO之前,您尝试过什么?
我看了下面的代码,不起作用:
list_display = ['text', 'applicant__name','applicant__email']

我看过ModelAdmin.inlines,但正如人们所看到的,父/子关系必须颠倒。

有什么建议?如何在“应用程序管理员”中显示申请人的姓名/电子邮件。大概无需使用新字段等迁移数据库。

最佳答案

您可以像list_display docs中的第四种可能性那样进行操作。只需向您的Application模型添加一个方法,如下所示:

class Application(models.Model):
    applicant = models.ForeignKey(Applicant)
    text = models.TextField(...)

    def applicant_name(self):
        return self.applicant.name
    applicant_name.short_description = 'Applicant Name'

    def applicant_email(self):
        return self.applicant.email
    applicant_email.short_description = 'Applicant Email'

然后您可以像这样设置您的ModelAdmin:
class ApplicationAdmin(model.ModelAdmin):
    list_display = ['text', 'applicant_name', 'applicant_email']

09-30 17:08
查看更多