前言
xadmin的詳情頁面默認是一行展示一個字段,可以使用form_layout對詳情頁面的布局重新設計。
可以設置必填和非必填字段,也可以設置不顯示,不可以編輯的字段。
models模塊
先在models.py建2張表
class ArticleClassify(models.Model):
'''文章分類'''
n = models.CharField(max_length=30, verbose_name="分類", default="")
def __str__(self):
return self.__doc__ + "->" + self.n
class Meta:
verbose_name = "文章分類"
verbose_name_plural = verbose_name
class ArticleDetail(models.Model):
'''文章'''
title = models.CharField(max_length=30, verbose_name="標題", default="輸入你的標題") # 標題
classify = models.ForeignKey(ArticleClassify,
on_delete=models.CASCADE,
related_name="classify_name",
verbose_name="文章分類",
)
body = models.TextField(verbose_name="正文", default="輸入正文") # 正文
auth = models.CharField(max_length=10, verbose_name="作者", default="admin") # 作者
detail = models.TextField(verbose_name="備注", default="添加備注")
# 創建時間
create_time = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")
# 最后更新時間
update_time = models.DateTimeField(auto_now=True, verbose_name="最后更新時間")
def __str__(self):
return self.__doc__ + "title->" + self.title
class Meta:
verbose_name = "文章列表"
verbose_name_plural = '文章列表'
adminx.py注冊表信息
class ControlActicl(object):
list_display = ['title', 'body', 'auth']
xadmin.site.register(ArticleDetail, ControlActicl)
之后執行 makemigrations 和migrate,同步數據
python manage.py makemigrations
python manage.py migrate
xadmin頁面優化
打開xadmin后台編輯頁面,默認顯示如下

使用form_layout重新布局,修改adminx.py注冊表內容
- 先從xadmin.layout導入需要用到的類如:Fieldset,Row
- form_layout 里面傳元組參數
- Fieldse是設置一個塊的標題名稱,默認是第一個參數
- Row是設置一行的顯示內容,可以多個參數顯示在一行
from xadmin.layout import Main, TabHolder, Tab, Fieldset, Row, Col, AppendedText, Side, Field
class MoreActicl(object):
list_display = ['title', 'body', 'auth']
form_layout = (
Fieldset(u'',
Row('title', 'auth'), # Row 表示將里面的字段作為一行顯示
Row('classify'),
),
Fieldset(('正文內容'), #Fieldset第一個參數表示區塊名稱
'body',
),
Fieldset(('備注'),
Row('detail'),
),
)
顯示效果如下

添加默認輸入值
也可以給編輯頁面設置默認參數,在models里面設置表字段的時候,加上參數default="輸入框內默認輸入的參數"

設置非必填
如何想設置非必填字段,在models里面設置表字段的時候,加上參數: blank=True。也可以同時加上blank=True, null=True
auth = models.CharField(max_length=10,
verbose_name="作者",
default="admin",
blank=True, null=True) # 作者
這樣auth參數就是非必填的了,前面沒紅色*號了

設置只讀字段
也可以設置只讀字段,加個readonly_fields=['xxx']
from xadmin.layout import Main, TabHolder, Tab, Fieldset, Row, Col, AppendedText, Side, Field
class MoreActicl(object):
list_display = ['title', 'body', 'auth']
readonly_fields = ['detail'] # 只讀字段
form_layout = (
Fieldset(u'',
Row('title', 'auth'), # Row 表示將里面的字段作為一行顯示
Row('classify'),
),
Fieldset(('正文內容'), #Fieldset第一個參數表示區塊名稱
'body',
),
Fieldset(('備注'),
Row('detail'),
),
)
xadmin.site.register(ArticleDetail, MoreActicl)

隱藏字段
不顯示某個字段,可以用exclude = ['auth']
class MoreActicl(object):
list_display = ['title', 'body', 'auth']
readonly_fields = ['detail'] # 只讀字段
exclude = ['auth'] # 不顯示某個字段
區塊不可以拖動
上面的幾個區塊,按住鼠標后是可以上下拖動位置的,如何不讓拖動可以加個餐:css_class = 'unsort no_title'
form_layout = (
Fieldset(u'',
Row('title', 'auth'), # Row 表示將里面的字段作為一行顯示
Row('classify'),
css_class = 'unsort' # 不讓區塊拖動
),
Fieldset(('正文內容'), #Fieldset第一個參數表示區塊名稱
'body',
css_class = 'unsort'
),
Fieldset(('備注'),
Row('detail'),
css_class = 'unsort no_title' # no_title是不顯示區塊的title名稱
),
)
unsort是不允許拖動 no_title是不顯示區塊的title名稱
