不建议在新项目中使用xadmin,因其长期未维护、与Django 3.2+兼容性差且存在安全风险;迁移旧项目时需替换urlresolvers为urls、仅注册xadmin路由、谨慎处理list_display字段及重写逻辑。

不建议在新项目中使用 xadmin,它已长期未维护,与 Django 3.2+ 兼容性差,且存在安全风险。如果你正在迁移旧项目或必须临时接入,以下操作能帮你绕过最常见崩点。
安装时 pip install xadmin 报错 ModuleNotFoundError: No module named 'django.core.urlresolvers'
Django 2.0 起移除了 django.core.urlresolvers,而 xadmin 的源码里还硬引用它。官方 fork 已停更,只能换镜像源或打补丁:
- 用社区维护的兼容分支:
pip install https://github.com/sshwsfc/xadmin/archive/django2.zip(仅支持 Django 2.x) - 若用 Django 3.2+,必须改源码:找到
xadmin/sites.py和xadmin/plugins/urls.py,把from django.core.urlresolvers import reverse改成from django.urls import reverse - 别碰 PyPI 上的原版
xadmin包——它最后更新是 2017 年,连 Python 3.8 都不认
注册 Model 后 admin 页面空白 / 404 / CSRF 错误
不是路由没配,是 xadmin 自带的 URL 模式和 Django 默认冲突,尤其在 settings.py 里混用了 admin.site.urls 和 xadmin.site.urls:
- 彻底删掉
django.contrib.admin相关配置:注释掉INSTALLED_APPS里的'django.contrib.admin',并删除url(r'^admin/', admin.site.urls)这类路由 -
urls.py中只留一条:path('xadmin/', xadmin.site.urls)(Django 2+)或url(r'^xadmin/', xadmin.site.urls)(Django 1.11) - CSRF 错误大概率因模板继承出问题:确保自定义 admin 模板里没漏掉
{% csrf_token %},且MIDDLEWARE中'django.middleware.csrf.CsrfViewMiddleware'在'django.contrib.sessions.middleware.SessionMiddleware'之后
list_display 字段显示异常或报 AttributeError
xadmin 对字段解析比 Django 原生 admin 更“激进”,会尝试调用方法、属性、外键关系,但不校验可调用性:
- 避免直接写
list_display = ['get_full_name', 'user.profile.avatar']——user.profile可能为None,导致页面整个崩溃;改用自定义方法并加try/except或空值判断 - 方法必须带
self参数,且返回字符串或 HTML;如果返回模型实例,xadmin会试图调用其__str__,但不会兜底处理异常 - 外键字段推荐用
'user__username'这种双下划线写法,而不是'user.username',后者在xadmin里不识别
真正麻烦的不是装不上,而是它把 Django admin 的扩展机制全绕过去了——信号、ModelAdmin 方法钩子、权限控制逻辑都得重适配。一个 save_model 重写,在原生 admin 里三行搞定,在 xadmin 里可能要翻源码找 form_post 插件入口。老项目凑合用可以,但别指望它跟上 Django 的迭代节奏。










