运行:pip install xadmin 后报错,以下为报错信息:
C:\Windows\system32>pip install xadmin
Collecting xadmin
Downloading xadmin-0.6.1.tar.gz (1.0MB)
100% |████████████████████████████████| 1.0MB 329kB/s
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "
File "C:\Users\Hao\AppData\Local\Temp\pip-build-m7x6g0ti\xadmin\setup.py", line 11, in
long_description=open('README.rst').read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 3444: illegal multibyte sequence
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Hao\AppData\Local\Temp\pip-build-m7x6g0ti\xadmin\
用另一种方法安装:
1、安装过程中你会发现在git上面提供的是pip install xadmin,而在对应的文档上面提供的是pip install django-xadmin
但是这两者对于python3.6而言,其实都是错误的,你需要使用的是: pip install git+git://github.com/sshwsfc/xadmin.git
最后pip会提示安装成功
2、但是你实际运行的时候又会发现,还缺少一个import_export的包
所以继续
pip install django-import-export
,安装成功以后,xadmin就算安装成功了。
3、然后在settings.py里面注册上
INSTALLED_APPS = (
...
'xadmin',
'crispy_forms',
'reversion',
...
)
4、在项目下面的urls.py里面进行替换
相信你能看得懂
import xadmin
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
5、在cmd中切到项目根目录下,运行:python manage.py makemigrations
6、5步骤后,继续运行:python manage.py migrate
7、然后在应用下写一个adminx.py文件,
import xadmin
xadmin.site.register(你的应用名)
这样就可以通过 …./xadmin/进入你的后台了
参考资料:http://blog.csdn.net/qq_26978413/article/details/78194815
0.推荐使用这种方法进行xadmin安装,因为后期可以根据需求对xadmin的源码进行修改
1.进入github官网
2.搜索xadmin
3.找到sshwsfc/xadmin
4.Download ZIP下载源码
5.解压文件并找到xadmin文件夹,并将该文件夹拉入项目的根目录下
6.然后在settings.py里面注册上
INSTALLED_APPS = (
...
'xadmin',
'crispy_forms',
'reversion',
...
)
7.在项目下面的urls.py里面进行替换
相信你能看得懂
import xadmin
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
8、在cmd中切到项目根目录下,运行:python manage.py makemigrations
9、继续运行:python manage.py migrate
10、然后在应用下写一个adminx.py文件,
import xadmin
xadmin.site.register(你的应用名)
11.然后在应用下写一个adminx.py文件,
import xadmin
xadmin.site.register(你的应用名)
这样就可以通过 …./xadmin/进入你的后台了
其中需要注意的是search_fields中不要把时间字段加入,如果加了时间字段,在使用搜索功能的时候容易报错。
adminx.py中一般配置(即没有关联外键):
import xadmin from .models import Course class CourseAdmin(object): list_display = ['name','desc','detail','degree','learn_times','students'] search_fields = ['name','desc','detail','degree','students'] list_filter = ['name','desc','detail','degree','learn_times','students'] xadmin.site.register(Course,CourseAdmin)
adminx.py中(若关联外键):
import xadmin from .models import Lesson class LessonAdmin(object): list_display = ['course','name','add_time'] # 因为course是外键,过滤器需要指定详细的外键字段才能在前端正确显示并且使用 search_fields = ['course__name','name'] #因为course是外键,过滤器需要指定详细的外键字段才能在前端正确显示 list_filter = ['course__name','name','add_time'] xadmin.site.register(Lesson,LessonAdmin)
users/adminx.py中(应该任意一个app都可以)。
from xadmin import views #额外的主题修改 class BaseSetting(object): enable_themes = True #表示使用主题功能 use_bootswatch = True
xadmin.site.register(views.BaseAdminView,BaseSetting)
#全局设置 from xadmin import views class GlobalSettings(object):
site_title = 'XMJsystem' #Logo site_footer = 'XMJ在线学习后台管理系统' #网页页脚信息 menu_style = 'accordion' #右侧导航栏折叠功能
该app下的apps.py中:
from django.apps import AppConfig class OperationConfig(AppConfig): name = 'operation' verbose_name = u'用户操作'
该app下的__init__.py中:
default_app_config = 'operation.apps.OperationConfig'
其他app类似。
# 数据展示 list_display = ['name','desc','detail','degree','learn_times','students','get_zj_nums','go_to'] # 查询 search_fields = ['name','desc','detail','degree','students'] # 筛选(后台管理页面中的过滤器) list_filter = ['name','desc','detail','degree','learn_times','students'] # 自定义后台系统的icon model_icon = 'fa fa-location-arrow' #这是第三方字体库,用最新的版本需要替换对应js和fonts文件 # 后台自定义默认排序 ordering = ['-click_nums'] # 后台自定义字段只可读 # readonly_fields = ['click_nums','fav_nums'] readonly_fields = ['click_nums'] # 后台自定义字段不显示 exclude = ['fav_nums'] #这里会跟readonly_fields冲突,所以readonly_fields的fav_nums去掉了, # 后台自定义不是下拉选择框,而是搜索框(解决了为什么用户不是下拉框的问题。。) relfield_style = 'fk-ajax' # 后台直接在表上修改数据 list_editable = ['degree','desc'] # xadmin/plugins/refresh插件定时刷新页面 refresh_times = [10,60] # 后台可选择10秒刷新一次或者60秒刷新一次
# 添加课程的时候外键关联该课程的数据直接添加编辑的设置 class LessonInline(object): model = Lesson extra = 0 # 添加课程的时候外键关联该课程的数据直接添加编辑的设置 class CourseResourceInline(object): model = CourseResource extra = 0 class CourseAdmin(object): inlines = [LessonInline,CourseResourceInline]
models.py中:
#后台系统根据布尔值BooleanField显示2张表 class BannerCourse(Course): class Meta: verbose_name = '轮播课程' verbose_name_plural = verbose_name #关键参数,有了这个参数后,不会多一张数据表 proxy = Truexadmin.py中:
class BannerCourseAdmin(object): inlines = [LessonInline,CourseResourceInline] # 数据展示 list_display = ['name','desc','detail','degree','learn_times','students'] # 查询 search_fields = ['name','desc','detail','degree','students'] # 筛选(后台管理页面中的过滤器) list_filter = ['name','desc','detail','degree','learn_times','students'] # 过滤取出的数据 def queryset(self): qs = super(BannerCourseAdmin, self).queryset() # 这条不起作用 qs.filter(is_banner = True) return qs xadmin.site.register(BannerCourse,BannerCourseAdmin)
不起效果,没有queryset()这个函数。
1.models.py:
#自定义获取章节数 def get_zj_nums(self): ''' 获取课程章节数 ''' all_lessons = self.course.all().count() return all_lessons get_zj_nums.short_description = '章节数' # 后台管理显示的title2.xadmin.py中:
list_display = ['get_zj_nums']
1.models.py中:
# 后台管理获得跳转链接 def go_to(self): from django.utils.safestring import mark_safe return mark_safe("跳转") go_to.short_description = '跳转' # 后台管理显示的title2.xadmin.py中:
list_display = ['go_to']
# 跟下面一样没有成功 # def save_models(self): # # 在保存课程的时候统计课程机构的课程数 # obj = self.new_obj # obj.save() # if obj.course_org is not None: # course_org = obj.course_org # course_org.course_nums = Course.objects.filter(course_org=course_org).count() # course_org.save()