这是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']