1. 安装xadmin
xadmin可以作为一个app使用,所以我们可以直接把xadmin文件夹拷贝到django项目文件夹下,再执行如下步骤:
1) 在django的settings.py, INSTALLED_APPS中添加 crispy_forms 和 xadmin
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.courses.apps.CoursesConfig',
'apps.users.apps.UsersConfig',
'apps.operation.apps.OperationConfig',
'apps.organizations.apps.OrganizationsConfig',
'crispy_forms',
'xadmin',
]
2) 安装xadmin的依赖包
django-crispy-forms
django-import-export
django-reversion
django-formtools
future
httplib2
six
xlwt
xlsxwriter
requests
我们可以将上面的包名都存储在一个txt文件中, 使用 pip install -r '文件名' 进行安装。
3) 通过 migrate生成admin需要的表
执行 python manage.py makemigrations [apps名] (python manage.py makemigrations xadmin)
生成xadmin对应的迁移文件,python manage.py migrate 执行迁移过程。
查看数据库中已经生成了xamin相关的表
4) 配置urls.py
from django.contrib import admin
from django.urls import path
import xadmin
urlpatterns = [
path('admin/', admin.site.urls),
path('xadmin/', xadmin.site.urls)
]
执行 python manage.py runserver, 在url中输入 /xadmin,可以看到xadmin后台:
2. 注册自己的model到xadmin
先回顾下将model添加到admin中的过程, 添加到xadmin与之相同
比如,要将user中的model添加到admin,需要在user下面的admin.py文件中,添加model中类UserProfile对应的类 UserProfileAdmin,并进行注册:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin # 添加这个类
from apps.users.models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
pass
# admin.site.register(UserProfile, UserProfileAdmin)
admin.site.register(UserProfile, UserAdmin) # 绑定django提供的类,解决用户密码不加密的问题
同理,我们只需要创建xadmin对应的文件 adminx.py ,并将model 和adminx中的类进行绑定:
import xadmin
from apps.courses.models import Course
class CourseAdmin(object):
pass
xadmin.site.register(Course, CourseAdmin)
一般我们需要在models.py中重写 __str__方法,以便后台管理反馈这个类添加成功的时候使用:
class City(BaseModel): # 单独创建一个城市类,因为城市可能会增加,方便后台进行添加
name = models.CharField(max_length=20, verbose_name='城市名')
desc = models.TextField(max_length=200, verbose_name='描述')
class Meta:
verbose_name = '城市'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
* 注意, str方法返回的内容不能为空,也就是上面的name字段是不能为空的
3. 改变 xadmin后台页面的显示
在organizations/ adminx.py 中, CityAdmin中定义如下字段,可以在xadmin后台添加对应的功能。
import xadmin
from apps.organizations.models import Teacher, CourseOrg, City
class TeacherAdmin(object):
pass
class CourseOrgAdmin(object):
pass
class CityAdmin(object):
list_display = ['id', 'name', 'desc']
search_fields = ['name', 'desc'] # 其中是搜索字段
list_filter = ['name', 'desc', 'add_time'] # 过滤器
list_editable = ['name', 'desc'] # 列出可编辑的字段
xadmin.site.register(Teacher, TeacherAdmin)
xadmin.site.register(CourseOrg, CourseOrgAdmin)
xadmin.site.register(City, CityAdmin)