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


前言

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名稱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM