前言

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

最新文章

  1. 一些LINQ的使用
  2. RSA签名验签学习笔记
  3. Asp.Net_单点登录
  4. iOS是怎么"绘画"的?
  5. SPOJ #10657. LOGIC (riddle)
  6. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
  7. 统一iOS客户端和服务器端认证
  8. 关于Core Data的一些整理(二)
  9. UML--核心元素之用例
  10. IOS GCD使用实例大全
  11. Windows窗口的尺寸和位置
  12. 通过Xshell登录远程服务器实时查看log日志
  13. python全栈学习--day4
  14. redis的持久化之AOF
  15. CCF CSP 201712-1 最小差值
  16. 结巴库及词频统计bb
  17. springboot+maven多模块工程dependency not found
  18. Oracle relink 重新编译
  19. mongoose 基础api 图表整理
  20. Java基础篇--字符串处理(StringBuffer)

热门文章

  1. Java编程的逻辑 (15) - 初识继承和多态
  2. 如何用prometheus监控k8s集群中业务pod的metrics
  3. 021.Zabbix的邮件告警-01
  4. 001.Git简介与安装
  5. JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型
  6. [转]LCT讲解
  7. Linux-C网络编程
  8. Java集合&Spring源码浅读
  9. ArduinoYun教程之通过网络为Arduino Yun编程
  10. vue组件之间通信传值