Django xadmin实现一次性选择多张图片并存储的一个方法, 以及详情页面多图展示
代码结构图
直接上源码
models.py设置如下
class picture(models.Model):
imgs = UploaderImageField(max_length=500, verbose_name='活动图片', null=True, blank=True, upload_to='image/')
class Img(models.Model):
model = models.ForeignKey(Dsj,on_delete=models.CASCADE,verbose_name='单图')
creattime = models.DateTimeField(verbose_name='创建时间', default=datetime.now)
image = models.ImageField(upload_to='image/', verbose_name='图片', null=True, blank=True)
class Meta:
verbose_name = u'单张图'
verbose_name_plural = verbose_name
widgets.py设置如下
from __future__ import absolute_import
from itertools import chain
from django import forms
try:
from django.forms.widgets import ChoiceWidget as RadioChoiceInput
except:
from django.forms.widgets import RadioFieldRenderer, RadioChoiceInput
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
from django.utils.html import conditional_escape
from django.utils.translation import ugettext as _
from .util import vendor
class AdminDateWidget(forms.DateInput):
@property
def media(self):
return vendor('datepicker.js', 'datepicker.css', 'xadmin.widget.datetime.js')
def __init__(self, attrs=None, format=None):
final_attrs = {
'class': 'date-field form-control', 'size': '10'}
if attrs is not None:
final_attrs.update(attrs)
super(AdminDateWidget, self).__init__(attrs=final_attrs, format=format)
def render(self, name, value, attrs=None, renderer=None):
input_html = super(AdminDateWidget, self).render(name, value, attrs, renderer)
return mark_safe('<div class="input-group date bootstrap-datepicker"><span class="input-group-addon"><i class="fa fa-calendar"></i></span>%s'
'<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div>' % (input_html, _(u'Today')))
class AdminTimeWidget(forms.TimeInput):
@property
def media(self):
return vendor('datepicker.js', 'clockpicker.js', 'clockpicker.css', 'xadmin.widget.datetime.js')
def __init__(self, attrs=None, format=None):
final_attrs = {
'class': 'time-field form-control', 'size': '8'}
if attrs is not None:
final_attrs.update(attrs)
super(AdminTimeWidget, self).__init__(attrs=final_attrs, format=format)
def render(self, name, value, attrs=None, renderer=None):
input_html = super(AdminTimeWidget, self).render(name, value, attrs, renderer)
return mark_safe('<div class="input-group time bootstrap-clockpicker"><span class="input-group-addon"><i class="fa fa-clock-o">'
'</i></span>%s<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div>' % (input_html, _(u'Now')))
class AdminSelectWidget(forms.Select):
@property
def media(self):
return vendor('select.js', 'select.css', 'xadmin.widget.select.js')
class AdminSplitDateTime(forms.SplitDateTimeWidget