Xadmin自定義佈局

一、前言

本Part,將介紹Django-Xadmin的佈局自定義方式。

參考了UserAdmin的佈局改寫:https://www.cnblogs.com/adc8868/p/7506973.html

但是我門總是不僅僅侷限於用戶管理這個頁面的改寫,所以本Part將以practise.Basic這個錄入控件案例爲例,介紹如何在Xadmin快速佈局。

二、目錄結構總覽

1、本part,我們在這個結構下進行代碼填充:

Project 目錄 (Django-Xadmin學習項目)
|
|-- app         
|   `-- practise  
...

三、官方代碼

1、首先我們先看看Xadmin中UserAdmin的佈局是怎麼寫的
(1)如果是extra_app拷到項目中的,則找到這個路徑

打開項目中的:/extra_app/
找到這個文件:xadmin/plugins/auth.py

(2)如果是pip安裝到Python環境中的,則找到這個路徑

到你的Python環境:D:\Programs\Python\Python36\venv\xadmin_learn\Lib\site-packages
找到這個文件:xadmin/plugins/auth.py

2、找到UserAdmin類的get_form_layout方法(大概在83行):

...
class UserAdmin(object):
  ...
  def get_form_layout(self):
      ...

3、對着用戶管理界面,學習佈局的代碼。

四、效果圖

1、首先這次我們要對practise.Basic的佈局進行改造,我們看看原來的佈局是怎麼樣的

 

原來的佈局

2、再看看自定義佈局後的樣子

 

自定義的佈局

3、可以看出來,佈局可以更緊湊,更靈活

五、追加代碼

1、在project/app/practise/adminx.py的class BasicAdmin,屬性的下方,追加這個方法:

# -*- coding: utf-8 -*-
import xadmin
# 這也是追加的
from django.utils.translation import ugettext as _
from xadmin.layout import Fieldset, Main, Side, Row

from .models import Basic


class BasicAdmin(object):
    list_display = ['input_single']  # 控制顯示列數  
    search_fields = ['input_single']  # 控制搜索框的顯示
    list_filter = ['input_single']  # 控制篩選

    # 這是追加的
    def get_form_layout(self):
        self.form_layout = (
            Main(
                Fieldset(_('文本錄入案例'),
                         'input_single',
                         'input_multi',
                         'input_slug',
                         Row('input_integer', 'input_positive_integer',),
                         Row('input_float', 'input_big_integer', ),
                         ),
                Fieldset(_('日期錄入案例'),
                         Row('input_date', 'input_time'),
                         'input_datetime'
                         ),
                Fieldset(_('網絡錄入案例'),
                         'input_url',
                         'input_email',
                         'input_generic_ip',
                         ),
                Fieldset('',
                         'add_time',
                         css_class='unsort no_title'
                         ),
            ),
            Side(
                Fieldset(_('其他'),
                         'input_null_boolean'
                         ),
                Fieldset(_('其他'),
                         'input_null_boolean'
                         ),
            )
        )
        return super(BasicAdmin, self).get_form_layout()

xadmin.site.register(Basic, BasicAdmin)

2、從代碼可以看出,要進行自定義xadmin佈局,要做2個步驟:
(1)在import上引入了一些依賴;
(2)在class裏面,追加了一個方法“get_form_layout(self)”

3、其中“get_form_layout(self)”方法和UserAdmin中“get_form_layout(self)”最大的不同,是UserAdmin多了一行

if self.org_obj:

的判斷,而我們自己定義的類中,是不需要這個判斷的。



作者:不願透露姓名的擼大溼
鏈接:https://www.jianshu.com/p/c381832dc5ff
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章