Django Xadmin 部分踩坑总结

1,006 阅读3分钟

一、Xadmin更改UsersAdmin注册相关信息

Xadmin默认为我们注册了Users模块, 但有时候显示的内容或新建用户时必填的字段没有显示出来,这里介绍两个方法自定义UserAdmin显示的内容:

  1. 网上有文档说在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)
  1. 在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()

这样在添加数据时,就需要输入用户了,默认就为当前登录的用户名, 很方便, 同理, 你也可以重写其他的内置方法来满足你的需求