写在开头: 建议使用源码安装xadmin, 这样可以根据自己实际需求做更灵活的处理
在xadmin
中图片选择按钮默认是只能单选
,如图:
并不能一次性选择多张图片并存储, 这里只需要修改一点xadmin源代码
, 就可以实现一次性选择多张图片并存储.
在xadmin源码目录xadmin/plugins/images.py
里找到第38行AdminImageWidget
这个类:
# xadmin/plugins/images.py 第38行
class AdminImageWidget(forms.FileInput):
"""
A ImageField Widget that shows its current value if it has one.
"""
def __init__(self, attrs={
}):
super(AdminImageWidget, self).__init__(attrs)
def render(self, name, value, attrs=None):
output = []
if value and hasattr(value, "url"):
label = self.attrs.get('label', name)
output.append('<a href="%s" target="_blank" title="%s" data-gallery="gallery"><img src="%s" class="field_img"/></a><br/>%s ' %
(value.url, label, value.url, _('Change:')))
output.append(super(AdminImageWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
AdminImageWidget
的注释就说明了它就是xadmin处理ImageField的插件,如果有图片, 就显示当前图片,下面的方法render
返回的就包含前面支付截图选项(xadmin是在这里根据加载的数据生成前端页面所需要的a标签并返回-----xadmin管理页面有很多都是这中处理方式), 而选择图片也只需要在return mark_safe
前面加上几行代码就可以把单选改为多选:
class AdminImageWidget(forms.FileInput):
"""
...
"""
def render(self, name, value, attrs=None):
output = []
if value and hasattr(value, "url"):
label = self.attrs.get('label', name)
output.append('<a href="%s" target="_blank" title="%s" data-gallery="gallery"><img src="%s" class="field_img"/></a><br/>%s ' %
(value.url, label, value.url, _('Change:')))
output.append