usersmodels三张表注册进xadmin, 配置搜索过滤展示字段,修复xadmin导出csv乱码,修复django2.0.1的indexError, str重载。对应5-3

This commit is contained in:
mtianyan
2018-01-09 20:01:03 +08:00
parent 497b9d1188
commit 933e5c19cd
6 changed files with 49 additions and 8 deletions
+28
View File
@@ -0,0 +1,28 @@
# encoding: utf-8
__author__ = 'mtianyan'
__date__ = '2018/1/9 0009 08:02'
import xadmin
from .models import EmailVerifyRecord, Banner
# 创建admin的管理类,这里不再是继承admin,而是继承object
class EmailVerifyRecordAdmin(object):
# 配置后台我们需要显示的列
list_display = ['code', 'email','send_type', 'send_time']
# 配置搜索字段,不做时间搜索
search_fields = ['code', 'email', 'send_type']
# 配置筛选字段
list_filter = ['code', 'email', 'send_type', 'send_time']
# 创建banner的管理类
class BannerAdmin(object):
list_display = ['title', 'image', 'url','index', 'add_time']
search_fields = ['title', 'image', 'url','index']
list_filter = ['title', 'image', 'url','index', 'add_time']
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
# 将model与admin管理器进行关联注册
xadmin.site.register(Banner, BannerAdmin)
+16 -6
View File
@@ -26,12 +26,13 @@ class UserProfile(AbstractUser):
# 地址
address = models.CharField(max_length=100, verbose_name="地址", default="")
# 电话
mobile = models.CharField(max_length=11, null=True, blank=True)
mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name=u"电话")
# 头像 默认使用default.png
image = models.ImageField(
upload_to="image/%Y/%m",
default=u"image/default.png",
max_length=100
max_length=100,
verbose_name=u"头像"
)
# meta信息,即后台栏目名
@@ -54,17 +55,21 @@ class EmailVerifyRecord(models.Model):
code = models.CharField(max_length=20, verbose_name=u"验证码")
# 未设置null = true blank = true 默认不可为空
email = models.EmailField(max_length=50, verbose_name=u"邮箱")
send_type = models.CharField(choices=SEND_CHOICES, max_length=10)
send_type = models.CharField(choices=SEND_CHOICES, max_length=10, verbose_name=u"验证码类型")
# 这里的now得去掉(),不去掉会根据编译时间。而不是根据实例化时间。
send_time = models.DateTimeField(default=datetime.now)
send_time = models.DateTimeField(default=datetime.now, verbose_name=u"发送时间")
class Meta:
verbose_name = "邮箱验证码"
verbose_name_plural = verbose_name
# 重载str方法使后台不再直接显示object
def __str__(self):
return '{0}({1})'.format(self.code, self.email)
# 轮播图model
class Banner(models.Model):
title = models.CharField(max_length=100, verbose_name=u"标题")
image = models.ImageField(
@@ -79,3 +84,8 @@ class Banner(models.Model):
class Meta:
verbose_name = u"轮播图"
verbose_name_plural = verbose_name
# 重载__str__方法使后台不再直接显示object
def __str__(self):
return '{0}(位于第{1}位)'.format(self.title, self.index)
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

+1 -1
View File
@@ -221,7 +221,7 @@ class ExportPlugin(BaseAdminPlugin):
def get_response(self, response, context, *args, **kwargs):
file_type = self.request.GET.get('export_type', 'csv')
response = HttpResponse(
content_type="%s; charset=UTF-8" % self.export_mimes[file_type])
content_type="%s; charset=gbk" % self.export_mimes[file_type])
file_name = self.opts.verbose_name.replace(' ', '_')
response['Content-Disposition'] = ('attachment; filename=%s.%s' % (
+4 -1
View File
@@ -72,7 +72,10 @@ class AdminSplitDateTime(forms.SplitDateTimeWidget):
forms.MultiWidget.__init__(self, widgets, attrs)
def render(self, name, value, attrs=None):
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('\n') if ht != '']
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/><') if ht != '']
if (len(input_html) > 1):
input_html[0] = input_html[0] + "/>"
input_html[1] = "<" + input_html[1]
# return input_html
return mark_safe('<div class="datetime clearfix"><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>'