自定義字段
- model字段就是在處理python對象/數據庫值/查詢值之間的轉換
- to_python() 被下面的代替,兼容考慮也要使用
- from_db_value() 從數據庫加載數據轉為python對象
- get_prep_value() 將python對象轉為查詢值
- get_db_prep_value() 將查詢值轉為數據庫值
- pre_save() 保存前預處理
- get_prep_lookup() 准備用於數據庫查找的值
- 通常定義前3個方法
下面是比較特殊的圖片字段
def _add_thumb(s):
parts = s.split(".")
parts.insert(-1, 'thumb')
if parts[-1].lower() not in ['jpeg', 'jpg']:
parts[-1] = 'jpg'
return '.'.join(parts)
class ThumbnailImageFieldFile(ImageFieldFile):
def _get_thumb_path(self):
return _add_thumb(self.path)
thumb_path = property(_get_thumb_path)
def _get_thumb_url(self):
return _add_thumb(self.url)
thumb_url = property(_get_thumb_url)
def save(self, name, content, save=True):
super(ThumbnailImageFieldFile, self).save(name, content, save)
img = Image.open(self.path)
img.thumbnail(
(self.field.thumb_width, self.field.thumb_height),
Image.ANTIALIAS
)
img.save(self.thumb_path, "JPEG")
def delete(self, save=True):
if os.path.exists(self.thumb_path):
os.remove(self.thumb_path)
super(ThumbnailImageFieldFile, self).delete(save)
class ThumbnailImageField(ImageField):
attr_class = ThumbnailImageFieldFile
def __init__(self, thumb_width=128, thumb_height=128, *args, **kwargs):
self.thumb_width = thumb_width
self.thumb_height = thumb_height
super(ThumbnailImageField, self).__init__(*args, **kwargs)