使用xadmin替換Django自帶的admin后台
Django自帶有admin后台,但是其風格並不漂亮、功能也不是讓人很滿意。因此一些大牛就重寫了admin后台叫做xadmin,進來的各位應該是對django自帶的admin不是很滿意,可以參照我的教程來一次替換。
0 源碼獲取
項目github地址為https://github.com/sshwsfc/xadmin,其中的xadmin文件夾是源碼文件夾。
如果網速不快,可以訪問我提供的鏈接,直接下載源碼和安裝依賴環境requirements.txt。https://pan.baidu.com/s/11ks1PsEl13V1H4W2vBd-Bw
1.1 xadmin放置位置
應將xadmin放在項目中與static目錄同,放置位置如圖所示。
1.2 修改配置文件
NSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',#添加
'crispy_forms',#添加
'reversion',#添加(可選)
'df_user',
'df_goods',
'tinymce',
'df_cart',
'df_order',
'haystack',
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 國際化設置
LANGUAGE_CODE = 'zh-hans'#更改(xadmin中文)
TIME_ZONE = 'Asia/Shanghai'#更改
- 1
- 2
- 3
-
修改路由(主路由處)
from django.conf.urls import url,include # from django.contrib import admin 注釋admin #以下四句為新添加內容 import xadmin xadmin.autodiscover() from xadmin.plugins import xversion xversion.register_models() urlpatterns = [ # url(r'^admin/', admin.site.urls),注釋原路由 url(r'^xadmin/',include(xadmin.site.urls)),#添加新路由 url(r'^user/', include('df_user.urls',namespace='user')), url(r'^', include('df_goods.urls',namespace='goods')), url(r'^cart/',include('df_cart.urls')), url(r'^order/',include('df_order.urls')), ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
1.3 別名設置
確保model.py中已經對各個參數設置了別名,這樣才能在后台正常顯示你所想看到的內容。對屬性名進行別名設置只需要在參數位置加上verbose_name=”想要的名字”即可,對類設置別名則需要定義一個子類。
class TypeInfo(models.Model):
ttitle = models.CharField(max_length=20,verbose_name="類別")
isDelete = models.BooleanField(default=False)
def __str__(self):
return self.ttitle
class Meta:
verbose_name = '商品類別'
verbose_name_plural = verbose_name
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
1.4 增加配置文件
-
在每個APP目錄下新建一個adminx.py文件,這里以訂單order為例。
model內容如下:
from django.db import models
# Create your models here.
class Order(models.Model):
oid = models.CharField(max_length=20,primary_key=True,verbose_name="訂單號")#訂單號
user = models.ForeignKey('df_user.User')
odate = models.DateTimeField(auto_now=True,verbose_name="提交時間")#訂單提交時間
oisPay = models.BooleanField(default=False,verbose_name="是否支付")
ototal = models.DecimalField(max_digits=6,decimal_places=2,verbose_name="總金額")#小數為2位,一共6位
oadress = models.CharField(max_length=150,verbose_name="地址")
class Meta:
verbose_name = '訂單'
verbose_name_plural = verbose_name
class OrderDetail(models.Model):
goods = models.ForeignKey('df_goods.GoodInfo')
order = models.ForeignKey(Order)
price = models.DecimalField(max_digits=5,decimal_places=2,verbose_name="價格")
count = models.IntegerField(verbose_name="數量")
class Meta:
verbose_name = '訂單詳情'
verbose_name_plural = verbose_name
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 創建adminx.py
必須叫adminx.py
import xadmin
from .models import Order,OrderDetail
class OrderAdmin(object):
list_display = ['oid','user' ,'odate','oisPay','ototal',
'oadress']
search_fields = ['oid', ]
list_editable = ['oid','user' ,'oisPay','ototal','oadress' ]
list_filter = ['oid','user' ,'odate','oisPay','ototal','oadress']
class OrderDetailAdmin(object):
list_display = ['goods', 'price', 'count', ]
list_editable = ['goods', 'price', 'count',]
list_filter = ['goods']
xadmin.site.register(Order,OrderAdmin)
xadmin.site.register(OrderDetail,OrderDetailAdmin)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 增加apps.py內容
from django.apps import AppConfig
class DfOrderConfig(AppConfig):
name = 'df_order'
verbose_name = "訂單"
- 1
- 2
- 3
- 4
- 5
- 增加_ _ init _ _.py內容
default_app_config='df_order.apps.DfOrderConfig'
- 1
同理,對其他APP模塊進行相同操作。
1.5 數據庫表
如果前面對model進行了修改,應該將數據庫移除,從新建表。
(venv) root@coding:/opt/duke/b2c-shop# python manage.py makemigrations
(venv) root@coding:/opt/duke/b2c-shop# python manage.py migrate
- 1
- 2
- 3
xadmin頁面展示