django admin图片上传回显

这个问题其实就是compute字段如何显示在django admin的编辑表单中。由于django admin默认只会显示model中editable=true的属性,所以计算字段需要特殊处理。

最开始是在model中直接定义了一个自定义方法属性image_data。

class Product(models.Model):
    # ... other fields
    image = models.ImageField(u'图片', upload_to='photos/%Y/%m/%d')
    def image_data(self, obj):
        return mark_safe(u'< img src="%s" width="100px" />' % obj.image.url)
    # 页面显示的字段名称
    image_data.short_description = u'品牌图片'

# 在admin.py中定义模型对应的admin展示方式
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'image_data')
    readonly_fields = ('image_data',)  #必须加这行 否则访问编辑页面会报错

以上这种方式可以在列表中正常显示上传的图片,但是在编辑表单中图片对应的字段只会显示一个label,内容不会显示出来。

经过google找到解决办法:

class Product(models.Model):
    # ... other fields
    image = models.ImageField(u'图片', upload_to='photos/%Y/%m/%d')

# 在admin.py中定义模型对应的admin展示方式
from django.utils.safestring import mark_safe
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'image_data')
    readonly_fields = ('image_data',)  #必须加这行 否则访问编辑页面会报错
    def image_data(self, obj):
        return mark_safe(u'< img src="%s" width="100px" />' % obj.image.url)
    # 页面显示的字段名称
    image_data.short_description = u'品牌图片'

看到这里应该清楚了吧,其实很简单只要将model中的自定义方法字段移到modelAdmin中即可。
注意:文章中的< img src="%s" width="100px" /> 故意在“<”后多加了空格 否则简书的编辑器会自动转义掉,大家写代码的时候要去掉否则会报错。(感谢P_sky的提醒)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容