一、前言
本Part烁登,將介紹Django-Xadmin的布局自定義方式。
參考了UserAdmin的布局改寫:https://www.cnblogs.com/adc8868/p/7506973.html
但是我門總是不僅僅局限于用戶管理這個(gè)頁面的改寫揍瑟,所以本Part將以practise.Basic這個(gè)錄入控件案例為例药蜻,介紹如何在Xadmin快速布局。
二欣福、目錄結(jié)構(gòu)總覽
1责球、本part,我們在這個(gè)結(jié)構(gòu)下進(jìn)行代碼填充:
Project 目錄 (Django-Xadmin學(xué)習(xí)項(xiàng)目)
|
|-- app
| `-- practise
...
三拓劝、官方代碼
1雏逾、首先我們先看看Xadmin中UserAdmin的布局是怎么寫的
(1)如果是extra_app拷到項(xiàng)目中的,則找到這個(gè)路徑
打開項(xiàng)目中的:/extra_app/
找到這個(gè)文件:xadmin/plugins/auth.py
(2)如果是pip安裝到Python環(huán)境中的郑临,則找到這個(gè)路徑
到你的Python環(huán)境:D:\Programs\Python\Python36\venv\xadmin_learn\Lib\site-packages
找到這個(gè)文件:xadmin/plugins/auth.py
2栖博、找到UserAdmin類的get_form_layout方法(大概在83行):
...
class UserAdmin(object):
...
def get_form_layout(self):
...
3、對著用戶管理界面厢洞,學(xué)習(xí)布局的代碼仇让。
四典奉、效果圖
1、首先這次我們要對practise.Basic的布局進(jìn)行改造妹孙,我們看看原來的布局是怎么樣的
2秋柄、再看看自定義布局后的樣子
3、可以看出來蠢正,布局可以更緊湊骇笔,更靈活
五、追加代碼
1嚣崭、在project/app/practise/adminx.py的class BasicAdmin笨触,屬性的下方,追加這個(gè)方法:
# -*- 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'] # 控制顯示列數(shù)
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(_('網(wǎng)絡(luò)錄入案例'),
'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雹舀、從代碼可以看出芦劣,要進(jìn)行自定義xadmin布局,要做2個(gè)步驟:
(1)在import上引入了一些依賴说榆;
(2)在class里面虚吟,追加了一個(gè)方法“get_form_layout(self)”
3、其中“get_form_layout(self)”方法和UserAdmin中“get_form_layout(self)”最大的不同签财,是UserAdmin多了一行
if self.org_obj:
的判斷串慰,而我們自己定義的類中,是不需要這個(gè)判斷的唱蒸。
4邦鲫、完工!