使用xadmin替換Django自帶的admin後臺

使用xadmin替換Django自帶的admin後臺

Django自帶有admin後臺,可是其風格並不漂亮、功能也不是讓人很滿意。所以一些大牛就重寫了admin後臺叫作xadmin,進來的各位應該是對django自帶的admin不是很滿意,能夠參照個人教程來一次替換。python

0 源碼獲取

項目github地址爲https://github.com/sshwsfc/xadmin,其中的xadmin文件夾是源碼文件夾。git

若是網速不快,能夠訪問我提供的連接,直接下載源碼和安裝依賴環境requirements.txt。https://pan.baidu.com/s/11ks1PsEl13V1H4W2vBd-Bwgithub

1.1 xadmin放置位置

應將xadmin放在項目中與static目錄同,放置位置如圖所示。
位置shell

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

settings1
- 國際化設置數據庫

LANGUAGE_CODE = 'zh-hans'#更改(xadmin中文)

  TIME_ZONE = 'Asia/Shanghai'#更改
  • 1
  • 2
  • 3

settings2

  • 修改路由(主路由處)django

    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=」想要的名字」便可,對類設置別名則須要定義一個子類。ruby

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爲例。bash

    model內容以下:markdown

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

model
- 建立adminx.pysession

必須叫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

adminx
- 增長apps.py內容

from django.apps import AppConfig

  class DfOrderConfig(AppConfig):
      name = 'df_order'
      verbose_name = "訂單"
  • 1
  • 2
  • 3
  • 4
  • 5

app
- 增長_ _ init _ _.py內容

default_app_config='df_order.apps.DfOrderConfig'
  • 1

init
同理,對其餘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頁面展現
xadmin12

相關文章
相關標籤/搜索