前言

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

python测试开发django-39.xadmin详情页面布局form_layout的更多相关文章

  1. python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

    前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...

  2. 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置

    第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin进阶 1.后台管理员详情页面布局 后台管理员详情页面,区块是可以拖动的,而且分为了很多个区块 这个页面的布局在xadm ...

  3. python测试开发django-36.一对一(OneToOneField)关系查询

    前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...

  4. python测试开发django-16.JsonResponse返回中文编码问题

    前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...

  5. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  6. 2019第一期《python测试开发》课程,10月13号开学

    2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...

  7. python测试开发django-rest-framework-63.基于函数的视图(@api_view())

    前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...

  8. Python测试开发必知必会-PEP

    互联网发展了许多年,不仅颠覆了很多行业,还让很多职位有了更多的用武之地.产品发布迭代速度不断加快,让测试开发这个岗位简直火得不要不要的. Python语言,作为一种更接近人来自然语言的开发语言,以简洁 ...

  9. Python测试开发-创建模态框及保存数据

    Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...

随机推荐

  1. shell中信号处理

    参考: Shell 脚本中信号处理实践 Linux Shell 的信号 trap 功能你必须知道的细节   在 unix 里,可能发生的每一种类型的事件都是由一个独立的信号来描述,每一个信号都是一个小 ...

  2. MVC底层原理

    窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时 ...

  3. 000 Html基本标签与案例

    在CSS之前,需要先介绍一下HTML的常用标签. 1.html与css的关系 2.程序 <!DOCTYPE HTML> <html> <head> <meta ...

  4. Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599

    //Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...

  5. 001.KVM介绍

    KVM介绍可参考: http://liqingbiao.blog.51cto.com/3044896/1740516 http://koumm.blog.51cto.com/703525/128879 ...

  6. 001.YUM源服务端搭建

    一 前期准备 1.1 地址规划 主机名 IP地址 备注 mirrors 172.24.8.71/24 yum服务器,与互联网同步 client 172.24.8.72/24 内部客户端 1.2 架构示 ...

  7. C++雾中风景10:聊聊左值,纯右值与将亡值

    C++11的版本在类型系统上下了很大的功夫,添加了诸如auto,decltype,move等新的关键词来简化代码的编写与降低阅读代码的难度.为了更好的理解这些新的语义,笔者确定通过几篇文章来简单窥探一 ...

  8. Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇

    转载:Home Assistant + 树莓派:强大的智能家居系统 · 设备接入篇 目录 HASS 配置框架 主文件设置 Homebridge 设置 鹬蚌相争? 设备追踪设置 更新日志 作者的话 相信 ...

  9. 数据包编辑工具bittwiste

    数据包编辑工具bittwiste   bittwiste是数据包重放工具bittwist的一个工具.该工具可以编辑修改PCAP抓包文件.该工具提供数据包过滤功能,如根据范围和时间过滤.同时,该工具支持 ...

  10. (android高仿系列)今日头条 --新闻阅读器 (转载)

    非常不错,原文地址:http://blog.csdn.net/vipzjyno1/article/details/26514543