You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin中如何将外键关联的自定义属性字段加入详情页fields?

解决Django Admin详情页显示自定义属性/外键关联字段的问题

这个报错的原因很清晰:Django Admin的fields配置只认模型中实际存在的数据库字段,而你定义的custom_field是Python的@property动态属性,不属于数据库存储的字段,直接加到fields里自然会提示找不到字段。

下面给你两种可行的解决方案,按需选择:

方案1:直接引用外键关联字段(推荐)

如果你的custom_field只是返回外键bookingid的username,完全不需要额外定义property,直接用Django的跨关系字段引用语法(双下划线__)就能在详情页展示关联内容:

class MyAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
    # 列表页配置保持不变
    list_display = ('custom_field', 'name')
    readonly = ('custom_field', 'name')
    # 直接通过外键关联语法调用目标字段
    fields = ('bookingid__username', 'name')

方案2:用readonly_fields加载自定义属性

如果custom_field有更复杂的计算逻辑,必须保留这个property,那么可以把它放到readonly_fields中(这个配置支持方法/动态属性),同时fields只放模型实际存在的数据库字段,也可以结合使用:

class MyAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
    list_display = ('custom_field', 'name')
    # 将自定义属性加入只读字段配置
    readonly_fields = ('custom_field', 'name')
    # fields里仅存放模型真实存在的数据库字段
    fields = ('name',)
    
    # 也可以用fieldsets分组展示,效果更清晰:
    # fieldsets = (
    #     (None, {
    #         'fields': ('name',),
    #         'readonly_fields': ('custom_field',)
    #     }),
    # )

这么配置后,详情页就能正常显示custom_field的内容了。核心逻辑是:readonly_fields的设计目的就是展示无需编辑、动态生成的内容,而fields仅负责可编辑(或指定展示)的数据库字段。

内容的提问来源于stack exchange,提问作者Aman Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:32:54