标签:用户 pen pat sys str des pyc image __str__
pip install django==2.0
, 指定特定的版本pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
, 从官方的 github 上下载 django2 分支的包, 也可通将该包下载下来再使用 pip 安装, 但是不推荐使用 pip 安装, 建议将 xadmin 放到 libs 下
.
├── __pycache__
│?? └── manage.cpython-36.pyc
├── apps
│?? ├── __pycache__
│?? ├── food
│?? │?? ├── __init__.py
│?? │?? ├── __pycache__
│?? │?? │?? ├── __init__.cpython-36.pyc
│?? │?? │?? ├── admin.cpython-36.pyc
│?? │?? │?? ├── adminx.cpython-36.pyc
│?? │?? │?? ├── apps.cpython-36.pyc
│?? │?? │?? └── models.cpython-36.pyc
│?? │?? ├── admin.py
│?? │?? ├── adminx.py
│?? │?? ├── apps.py
│?? │?? ├── migrations
│?? │?? │?? ├── 0001_initial.py
│?? │?? │?? ├── __init__.py
│?? │?? │?? └── __pycache__
│?? │?? │?? ├── 0001_initial.cpython-36.pyc
│?? │?? │?? └── __init__.cpython-36.pyc
│?? │?? ├── models.py
│?? │?? ├── tests.py
│?? │?? └── views.py
│?? └── user
│?? ├── __init__.py
│?? ├── __pycache__
│?? │?? ├── __init__.cpython-36.pyc
│?? │?? ├── admin.cpython-36.pyc
│?? │?? ├── adminx.cpython-36.pyc
│?? │?? ├── apps.cpython-36.pyc
│?? │?? └── models.cpython-36.pyc
│?? ├── admin.py
│?? ├── adminx.py
│?? ├── apps.py
│?? ├── migrations
│?? │?? ├── 0001_initial.py
│?? │?? ├── 0002_auto_20190621_1320.py
│?? │?? ├── __init__.py
│?? │?? └── __pycache__
│?? │?? ├── 0001_initial.cpython-36.pyc
│?? │?? ├── 0002_auto_20190621_1320.cpython-36.pyc
│?? │?? └── __init__.cpython-36.pyc
│?? ├── models.py
│?? ├── tests.py
│?? └── views.py
├── libs
├── manage.py
├── media
├── static
├── templates
├── utils
│?? └── __init__.py
└── xadmintest
├── __init__.py
├── __pycache__
│?? ├── __init__.cpython-36.pyc
│?? ├── settings.cpython-36.pyc
│?? ├── urls.cpython-36.pyc
│?? └── wsgi.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
INSTALL_APPS
时可以直接写 app 名(推荐这样写, 不这样写可能会有错误)
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'libs'))
INSTALL_APPS
添加 xadmin
, reversion
, crispy_forms
将 settings.py 中的语言设置成使其支持中文
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False # 设置为 False 则使用本地时间,否则会使用国际时间
AUTH_USER_MODEL = ‘user.UserProfile‘
来说重载系统的 User, 其中 user 是 app 名, UserProfile 是该 app 下 models.py 文件中定义的继承了 django.contrib.auth.model.AbstractUser
的类的类名path(‘xadmin/‘, xadmin.site.urls)
为每一个 model 配置一个 admin, 不再使用 admin.py 而是使用 adminx.py, 在 adminx.py 中使用, 和 admin.py 用法差不多, 我们只需要提供 list_display
, search_fields
, list_filter
class UserAdmin(object):
list_display = ['name', 'birthday', 'gender']
search_fields = ['name', 'birthday', 'gender']
list_filter = ['name', 'birthday', 'gender']
# xadmin.site.register(UserProfile, UserAdmin), model 不能为 User, 因为内部已经使用了
# 注意, 在扩展 Django 自带的 User 模块时, 需要设置 null=True, blank=True, 否则在之后的 ./manage.py createsuperuser 中会失败
class BaseSetting(object):
enable_themes = True
use_bootswatch = True
class GlobalSettings(object):
site_title = '我的管理后台'
site_footer = '我的后台'
xadmin.site.register(views.BaseAdminView, BaseSetting)
xadmin.site.register(views.CommAdminView, GlobalSettings)
__init__.py
中添加
default_app_config = 'user.apps.UserConfig' # 这里的 user 为 app 名, UserConfig 为 apps.py 中的类的类名, 要在 UserConfig 中填写 name 和 verbose_name 两个属性, 其中 verbose_name 为中文
./manage.py makemigrations && ./manage.py migrate
./manage.py createsuperuser
# libs/xadmin/plugins/ueditor.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xadmin
from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
from DjangoUeditor.models import UEditorField
from DjangoUeditor.widgets import UEditorWidget
from django.conf import settings
class XadminUEditorWidget(UEditorWidget):
def __init__(self, **kwargs):
self.ueditor_options = kwargs
self.Media.js = None
super(XadminUEditorWidget,self).__init__(kwargs)
class UeditorPlugin(BaseAdminPlugin):
def get_field_style(self, attrs, db_field, style, **kwargs):
if style == 'ueditor':
if isinstance(db_field, UEditorField):
widget = db_field.formfield().widget
param = {}
param.update(widget.ueditor_settings)
param.update(widget.attrs)
return {'widget':XadminUEditorWidget(**param)}
return attrs
def block_extrahead(self, context, nodes):
print(settings.STATIC_URL)
js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js")
js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js")
nodes.append(js)
xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
# apps/yourmodel/models.py
class Food(models.Model):
name = models.CharField(max_length=30, verbose_name='食品名称')
price = models.FloatField(default=0, verbose_name='价格')
brief = models.TextField(max_length=500, verbose_name='简介')
description = UEditorField(verbose_name='内容', imagePath='food/images/', filePath='food/files/', default='')
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
class Meta:
verbose_name = '食品'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
标签:用户 pen pat sys str des pyc image __str__
原文地址:https://www.cnblogs.com/megachen/p/11074716.html