博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python测试开发django-39.xadmin详情页面布局form_layout
阅读量:4347 次
发布时间:2019-06-07

本文共 4228 字,大约阅读时间需要 14 分钟。

前言

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_nameclass 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后台编辑页面,默认显示如下

1070438-20190326172341074-1126192910.png

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

  • 先从xadmin.layout导入需要用到的类如:Fieldset,Row
  • form_layout 里面传元组参数
  • Fieldse是设置一个块的标题名称,默认是第一个参数
  • Row是设置一行的显示内容,可以多个参数显示在一行
from xadmin.layout import Main, TabHolder, Tab, Fieldset, Row, Col, AppendedText, Side, Fieldclass MoreActicl(object):    list_display = ['title', 'body', 'auth']    form_layout =  (        Fieldset(u'',             Row('title', 'auth'),  # Row 表示将里面的字段作为一行显示             Row('classify'),             ),        Fieldset(('正文内容'), #Fieldset第一个参数表示区块名称             'body',              ),        Fieldset(('备注'),             Row('detail'),              ),        )

显示效果如下

1070438-20190326172740263-1731571565.png

添加默认输入值

也可以给编辑页面设置默认参数,在models里面设置表字段的时候,加上参数default="输入框内默认输入的参数"

1070438-20190326172956627-589572979.png

设置非必填

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

auth = models.CharField(max_length=10,                             verbose_name="作者",                            default="admin",                             blank=True, null=True)   # 作者

这样auth参数就是非必填的了,前面没红色*号了

1070438-20190326173321169-463414027.png

设置只读字段

也可以设置只读字段,加个readonly_fields=['xxx']

from xadmin.layout import Main, TabHolder, Tab, Fieldset, Row, Col, AppendedText, Side, Fieldclass 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)

1070438-20190326173746747-1390765266.png

隐藏字段

不显示某个字段,可以用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名称

转载于:https://www.cnblogs.com/yoyoketang/p/10601833.html

你可能感兴趣的文章
类中的静态函数和非静态函数的区别
查看>>
windows 下安装Apache
查看>>
Fedora14 mount出现错误时解决办法【亲测有效】
查看>>
ruby实现生产者和消费者
查看>>
node.js 之 http 架设
查看>>
MongoDB 备份与还原
查看>>
Oracle启动与关闭数据库实例
查看>>
Spring day01
查看>>
hihocoder-1740-替换函数
查看>>
Codeforce Round #219 Div2
查看>>
option value的值可以有空格 再试试吧
查看>>
.htaccess to httpd.conf
查看>>
node.js 基础学习笔记2
查看>>
hadoop中常见元素的解释
查看>>
BZOJ-1497 最大获利
查看>>
4-4 修改文件
查看>>
并发编程(十):AQS
查看>>
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>
Comparison among several SGD derivation
查看>>
ModelAndView同时向页面传递多个参数
查看>>