xadmin的詳情頁面默認是一行展現一個字段,能夠使用form_layout對詳情頁面的佈局從新設計。
能夠設置必填和非必填字段,也能夠設置不顯示,不能夠編輯的字段。css
先在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後臺編輯頁面,默認顯示以下設計
使用form_layout從新佈局,修改adminx.py註冊表內容code
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名稱