python測試開發django-39.xadmin詳情頁面佈局form_layout

前言

xadmin的詳情頁面默認是一行展現一個字段,能夠使用form_layout對詳情頁面的佈局從新設計。
能夠設置必填和非必填字段,也能夠設置不顯示,不能夠編輯的字段。css

models模塊

先在models.py建2張表python

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註冊表信息ide

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註冊表內容code

  • 先從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'),
              ),
    
    )

顯示效果以下orm

添加默認輸入值

也能夠給編輯頁面設置默認參數,在models裏面設置表字段的時候,加上參數default="輸入框內默認輸入的參數"blog

設置非必填

如何想設置非必填字段,在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名稱

相關文章
相關標籤/搜索