• Django admin 显示图片


    我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得。目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Django admin 逻辑将文件上传到 cdn 获取地址后,储存到数据库。

    # 自定义表单
    class PuzzleImgForm(forms.ModelForm):
        picture = forms.FileField(label='图片', required=False)
    
    # 覆盖 Django admin 代码
    def get_form(self, request, obj=None, **kwargs):
       return PuzzleImgForm

    # 数据表只储存图片链接
    picture = models.CharField("图片url", max_length=2048, null=True, blank=True)

      

    现在,遇到一个问题,修改图片的时候看不到图片的样子,只能看到 url,不够直观。于是我就搜索 `django admin form show image`。发现一个答案比较简洁,尝试并修改了部分,成功了。

    def image_img(self):
        if self.image:
            return marksafe('<img src="%s" />' % self.image_url)
        else:
            return '(no image)'
    
    image_img.short_description = 'Thumb'
    
    # and in your admin.py add:
    list_display= ('image_img','product',)
    readonly_fields = ('image_img',)
    
    #and for adding it in the 'Edit mode' of your admin panel in your admin.py add:
    fields = ( 'image_img', )

    我这里的问题是,使用 fields 会覆盖自定义的表单,admin 页面上只出现一个 image_img 字段。如果删除 fields,将 `image_img` 加入 `ist_display`,那么 `image_img` 不会出现。最后我将其放入 `readonly_fields` 才生效。

    我的思考

    关于重写 Django admin

    能使用大部分 Django 已有的功能,只需要重写少部分排版与筛选。覆盖 Django 源码可能会很麻烦。

    关于Django 用法

    `list_display` 与 `fields` 有什么区别?

    关于向下兼容与重构

     我们写代码的时候,看到之前的代码,想的更多是重构掉,而不是向下兼容,因为往往之前的代码存在各种问题,保持继续兼容反而会更难受。比如 python2 的编码问题,python3 就彻底不同,从 ASCII 改为 UNICODE。我认为,保持兼容是要之前的代码立意、逻辑正确,才有意义。但是,一开始写代码,一些情况、需求往往和之后的会不一样,这种情况要怎么处理?

  • 相关阅读:
    控件视图的实现原理
    建造者模式
    leetcode701
    leetcode991
    leetcode990
    leetcode989
    leetcode988
    leetcode987
    leetcode986
    leetcode985
  • 原文地址:https://www.cnblogs.com/jay54520/p/6209059.html
Copyright © 2020-2023  润新知