一、Xadmin更改UsersAdmin注册相关信息
Xadmin默认为我们注册了Users模块, 但有时候显示的内容或新建用户时必填的字段没有显示出来,这里介绍两个方法自定义UserAdmin显示的内容:
- 网上有文档说在admin.py中自定义UserAdmin, 自定义展示的字段等,然后先执行unregister,再注册自定义的UserAdmin,代码如下:
import xadmin
from django.contrib.auth import get_user_model #这个方法能帮我们找到用户Model
# 自定义
class UserAdmin2(object):
list_display = ("username", "name", "workid", 'user_type','date_joined','last_login')
# 自定义你要显示、搜索、过滤等其他字段
)
# 执行注册程序
xadmin.site.unregister(get_user_model())
xadmin.site.register(get_user_model(),UserAdmin2)
-
在xadmin代码中更改
找到xadmin种的UserAdmin模块更改, 路径:
xadmin => plugins => auth.py
大约在61行左右找到UserAdmin这个模块, 就可以自定义内容了
我用第一种方法时一直报 Users 未注册的bug,弄了很久都没好,最后使用第2种方法
二、新建用户页面添加自定义字段
因为我项目内的Users Model是继承了django的AbstractUser,然后自定义了部分字段,有部分字段是必填的, 而xadmin默认的添加用户界面只有username、 password1、password2, 导致我新建用户时一直出错, 解决方法如下:
找到xadmin种的UserAdmin模块, 路径: xadmin => plugins => auth.py
, 大约在81行左右找到 self.form = UserCreationForm
, 然后进入到UserCreateForm模块中, 就可以添加我们自定义的字段了, 我这里添加了两个必填字段:
name = forms.CharField(
# 限制长度
max_length=30,
# 显示的名称
label='姓名',
# 显示的备注
help_text='输入您的名字'
)
workid = forms.CharField(
# 限制长度
max_length=30,
# 显示的名称
label='工号',
# 显示的备注
help_text='输入您的工号'
)
# 添加自定义字段后在Meta中的fields中添加你在上面添加的字段
class Meta:
...
fields = ("username","name","workid")
...
添加完成之后再次打开新建用户界面就能看到我们添加的字段啦
三、添加数据表的charts
如果你想再某个数据表页面中展示图形表, 将以下字段添加到你定义的Model OptionClass中
class RecordAdmin(object):
data_charts = {
"user_count": {'title': u"User Report", "x-field": "date", "y-field": ("user_count", "view_count"), "order": ('date',)},
"avg_count": {'title': u"Avg Report", "x-field": "date", "y-field": ('avg_count',), "order": ('date',)}
}
# 图表的主要属性为:
# ``title`` : 图表的显示名称
# ``x-field`` : 图表的 X 轴数据列, 一般是日期, 时间等
# ``y-field`` : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示
# ``order`` : 排序信息, 如果不写则使用数据列表的排序
此图形表比较简单,只能展示基本数据图
四、添加数据的时候,添加某个字段的默认值
我在添加数据的时候, 有个数据添加者的字段,每次都需要选择用户, 很麻烦, 我们可以重定义ModelAdmin中的save_models方法, 为字段添加默认值, 我这里是添加当前登录的用户名为数据添加者的默认值
class DataAdmin(object):
...
def save_models(self):
obj = self.new_obj
request = self.request
# 将字段默认值设置为当前登录的用户
obj.user = request.user.name
obj.save()
这样在添加数据时,就需要输入用户了,默认就为当前登录的用户名, 很方便, 同理, 你也可以重写其他的内置方法来满足你的需求