python测试开发django-39.xadmin详情页面布局form_layout

前言

xadmin的详情页面默认是一行展现一个字段,能够使用form_layout对详情页面的布局从新设计。
能够设置必填和非必填字段,也能够设置不显示,不能够编辑的字段。php

models模块

先在models.py建2张表css

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注册表信息python

class ControlActicl(object): list_display = ['title', 'body', 'auth'] xadmin.site.register(ArticleDetail, ControlActicl)

以后执行 makemigrations 和migrate,同步数据ide

python manage.py makemigrations
python manage.py migrate布局

xadmin页面优化

打开xadmin后台编辑页面,默认显示以下优化

使用form_layout从新布局,修改adminx.py注册表内容spa

  • 先从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="输入框内默认输入的参数"3d

设置非必填

如何想设置非必填字段,在models里面设置表字段的时候,加上参数: blank=True。也能够同时加上blank=True, null=Truecode

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

相关文章
相关标签/搜索