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

在Django Admin用户修改表单中展示非模型字段的外部链接图片

问题原因说明

  • 自定义ModelForm未生效:BaseUserAdmin内置了预设的fieldsets配置,优先级高于ModelForm的Meta.fields,仅指定form属性不会覆盖原有字段展示规则。
  • 自定义方法加入fieldsets报错:fieldsets默认仅接受模型/表单字段,非字段的自定义方法需要先加入readonly_fields配置才能被正常识别渲染。

实现方案

你已经在模型层定义了image方法,仅需修改UserAdmin配置即可实现需求:

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    # 保留原有配置,比如列表页展示字段
    list_display = ('image',) + BaseUserAdmin.list_display
    
    # 第一步:把自定义image方法加入只读字段
    readonly_fields = ('image',) + BaseUserAdmin.readonly_fields
    
    # 第二步:修改fieldsets,把image放到用户名、密码字段下方
    fieldsets = (
        (None, {
            # 按你需要的顺序排布字段,image放在password之后即可
            "fields": ("username", "password", "image",)
        }),
        # 保留BaseUserAdmin原有的其他配置(个人信息、权限、重要日期等区块)
        *BaseUserAdmin.fieldsets[1:]
    )

如果不想把image方法耦合在模型层,也可以直接定义在UserAdmin类内部,效果完全一致:

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    list_display = ('image',) + BaseUserAdmin.list_display
    readonly_fields = ('image',) + BaseUserAdmin.readonly_fields
    
    fieldsets = (
        (None, {
            "fields": ("username", "password", "image",)
        }),
        *BaseUserAdmin.fieldsets[1:]
    )

    # Admin层内部定义image方法
    def image(self, obj):
        from django.utils.safestring import mark_safe
        from django.utils.translation import gettext as _
        # 这里可以根据obj的用户信息动态拼接外部图片地址
        return mark_safe('<img src="http://onlinesource.com/image.png" width=200 height=200 alt="image" />')
    image.short_description = _('Image')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:07