Django ForeignKey反向互访:在Client应用admin中展示关联Email外键
实现方案
步骤1:编辑Client应用的admin.py文件
在Client应用目录下新建/打开admin.py,写入以下代码:
from django.contrib import admin from .models import Client from Email.models import ScheduledEmail # 定义关联邮件的内联展示类 class ScheduledEmailInline(admin.TabularInline): model = ScheduledEmail # 额外空行数量,设为0避免默认显示多余的待添加行 extra = 0 # 要展示的字段,可根据需求自行调整 fields = ["subject", "recipient_email", "sent", "datetime_sent", "datetime_created"] # 设为只读的字段,禁止在Client页面修改邮件内容 readonly_fields = ["datetime_sent", "datetime_created", "recipient_email", "subject"] # 自定义Client的管理类 class ClientAdmin(admin.ModelAdmin): # 内联展示关联的邮件 inlines = [ScheduledEmailInline] # (可选)Client列表页显示关联邮件数量 list_display = ["name", "email", "number", "scheduled_email_count"] def scheduled_email_count(self, obj): # 调用ForeignKey定义的related_name获取关联邮件总数 return obj.scheduled_emails_sent.count() # 列表页该字段的显示名称 scheduled_email_count.short_description = "关联邮件数量" # 注册Client到管理后台 admin.site.register(Client, ClientAdmin)
效果说明
- 打开任意Client的详情编辑页,底部会以表格形式展示所有关联的ScheduledEmail记录
- (可选配置)Client列表页会新增「关联邮件数量」列,可直观看到每个客户绑定的邮件总数
- 如果希望每条邮件单独占块展示,把
admin.TabularInline换成admin.StackedInline即可
内容的提问来源于stack exchange,提问作者Baked Potato
相关产品推荐
相关产品推荐

