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。我認為,保持兼容是要之前的代碼立意、邏輯正確,才有意義。但是,一開始寫代碼,一些情況、需求往往和之后的會不一樣,這種情況要怎么處理?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM