我有一个表用来储存轮播图片,有一个 `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。我认为,保持兼容是要之前的代码立意、逻辑正确,才有意义。但是,一开始写代码,一些情况、需求往往和之后的会不一样,这种情况要怎么处理?

Django admin 显示图片的更多相关文章

  1. SQLAlchemy连接数据库并在django admin显示

    SQLAlchemy 0.7     postgersql  9.0 SQLAlchemy连接数据库有两种方法,一种是classic,一种是modern 1,modern方法 from sqlalch ...

  2. django后台显示图片 而不是图片地址

    修改admin代码 class Ad_CampaingAdmin(admin.ModelAdmin): list_display = ("content","previe ...

  3. django admin显示多对多字段

    参考文档https://jingyan.baidu.com/article/4e5b3e190f55c591901e24b3.html admin.py from .models import *cl ...

  4. django admin显示多对多字段ManyToManyField

    参考文档https://jingyan.baidu.com/article/4e5b3e190f55c591901e24b3.html admin.py from .models import *cl ...

  5. Django Admin 图片路径设置显示为图片(imageField显示方法设置)

    一  使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7  (Windows x86-64 executable in ...

  6. django上传并显示图片

    环境 python 3.5 django 1.10.6 步骤 创建名为 testupload的项目 django-admin startproject testupload 在项目testupload ...

  7. Django Admin site 显示问题

    Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...

  8. django admin编辑被外键关联的主表时支持显示字表记录

    假设有模型 class A(models.Model): name = models.CharField() class B(models.Model): name = models.CharFiel ...

  9. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

随机推荐

  1. Mac OS 文件、文件夹重命名的方法

    在Mac OS中,文件和文件名重命名的方法非常简单 选中你想要命名的文件或者文件夹,按回车,可以直接重命名,输入你要修改的内容,确认后,再按回车就OK啦--- 希望能对你有所帮助^_^

  2. Windows 编程中的字符串(2)

    (1)windows写日志系统 void writeDebugEventLog(TCHAR* pszMessage, WORD wType) { //#ifdef _DEBUG HANDLE hEve ...

  3. vs2015密钥 企业版 专业版 (vs.net)

    专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

  4. 【译】Java中的枚举

    前言 译文链接:http://www.programcreek.com/2014/01/java-enum-examples/ Java中的枚举跟其它普通类很像,在其内部包含了一堆预先定义好的对象集合 ...

  5. Linux 执行partprobe命令时遇到Unable to open /dev/sr0 read-write (Read-only file system)

    在使用fdisk创建分区时,我们会使用partprobe命令可以使kernel重新读取分区信息,从而避免重启系统,但是有时候会遇到下面错误信息"Warning: Unable to open ...

  6. java开发中的23中设计模式详解--大话设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. [整]SQL执行顺序

    SQL的执行顺序: 第一步:FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate ...

  8. jstl 中<c:forEach />标签

    <c:forEach>标签有如下属性: 属性 描述 是否必要 默认值 items 要被循环的信息 否 无 begin 开始的元素(0=第一个元素,1=第二个元素) 否 0 end 最后一个 ...

  9. ASP.NET 跨域

    #region 支持跨域请求 //Response.ClearHeaders(); string origin = Request.Headers["Origin"]; Respo ...

  10. 远程连接mysql报错【1130 -host 'localhost' is not allowed to connect to this mysql server】

    远程连接mysql时包如下错误: 1130 -host 'localhost' is not allowed to connect to this mysql server 解决办法 本地用root账 ...