首页 > 其他分享 >simpleui layer 自动更新数据并且在migrate时layer不自动加载

simpleui layer 自动更新数据并且在migrate时layer不自动加载

时间:2024-01-29 12:44:25浏览次数:21  
标签:layer return 自动更新 migrate self func def

前言

这个问题应该不会有很多同学遇到,但是如果遇到了可以参考解决。

当你使用simpleui layer 时肯定会遇到更新了数据库数据后,layer中的数据并没有自动更新的情况。而当你更新解决完数据自动更新之后,很有可能会引出另一个问题,当模型结构发生变更时,恰好自动更新layer的时候需要依赖这个模型,嘿嘿,那你就会在migrate的时候报错,类似:

django.db.utils.OperationalError: (1054, "Unknown column 'assets_DomainList.cloud_certificate_id' in 'field list'")

一 自动更新layer数据

通过admin_action装饰器将layer所需要的属性都进行赋值。

1 生成layer

1.1 按钮

 @admin_action(short_description='导入域名列表', _type='success', icon='el-icon-s-promotion',
                  layer=ImportDomainListLayer()())
    def import_domain_list(self, request, queryset):
        return JsonResponse(data={
            'status': 'success',
            'msg': '处理成功!'
        })

1.2 layer装饰器

def admin_action(short_description=None, icon=None, _type=None, confirm=None, style=None, layer=None):
    """
    后台action属性装饰器
    :param layer:
    :param style:
    :param short_description:
    :param icon:
    :param _type:
    :param confirm:
    :return:
    """
    def decorator(func):
        func.short_description = short_description
        func.icon = icon
        func.type = _type
        func.confirm = confirm
        func.style = style
        func.layer = layer

        @wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)

        return wrapper

    return decorator

1.3 合成layer的类

class ImportDomainListLayer:
    def __init__(self):
        self.layer = {
            'title': '导入域名和记录',
            'tips': '清空之后重新导入,不同凭证对应不同的平台。',
            'confirm_button': '确认提交',
            'cancel_button': '取消',
            'width': '40%',
            'labelWidth': "80px",
            'params': []
        }
        self.dst_cloud_select = {
            'type': 'select',
            'key': 'dst_cloud',
            'label': '目标云平台凭证',
            'size': 'small',
            'options': []
        }

    def generate_layer(self):
        self.dst_cloud_select['options'] = [{'key': cc.id, 'label': cc.name} for cc in CloudCertificate.objects.all()]
        self.layer['params'] = [
            self.dst_cloud_select,
        ]
        return self.layer

    @admin_layer_load
    def __call__(self, *args, **kwargs):
        return self.generate_layer()

2 自动更新layer数据

通过信号在依赖的模型每次新增数据后自动刷新layer属性数据。

2.1 信号函数

@receiver(post_delete, sender=CloudCertificate, dispatch_uid='post_delete_CloudCertificate')
def del_import_domain_list_layer(sender, **kwargs):
    logger.info("CloudCertificate del 触发信号。")
    DomainListMixins.import_domain_list.layer = ImportDomainListLayer()()

 

二 在migrate时layer不自动加载

思路就是在migrate的时候忽略掉layer的加载。

1 控制不加载的装饰器

def admin_layer_load(func):
    """
    在migrate模式下,不加载layer
    :param func:
    :return:
    """
    @wraps(func)
    def wrapper(*args, **kwargs):
        return 'pass' if 'migrate' in sys.argv else func(*args, **kwargs)
    return wrapper

2 在调用layer的时候加入判断

    @admin_layer_load
    def __call__(self, *args, **kwargs):
        return self.generate_layer()

 

要是大佬们有更好的解决办法,可以留言赐教。

标签:layer,return,自动更新,migrate,self,func,def
From: https://www.cnblogs.com/bill2014/p/17994211

相关文章

  • 描述文件错误:如何屏蔽 iOS 软件自动更新,去除更新通知和标记
    描述文件错误:如何屏蔽iOS软件自动更新,去除更新通知和标记适用于iOS、iPadOS和watchOS,即iPhone、iPad和AppleWatch通用请访问原文链接:https://sysin.org/blog/disable-ios-update/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org如何禁用iPhone、iPad和A......
  • 无涯教程-CSS - 图层(Layers)
     CSSlayers指的是将z-index属性应用于彼此重叠的元素。z-index属性与position属性一起使用以创建图层效果。您可以指定哪个元素应该放在顶部,哪个元素应该放在底部。<html><head></head><body><divstyle="background-color:red;width:300......
  • 如何进行H.265视频播放器EasyPlayer.js的中性化设置?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、fmp4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能......
  • 如何进行H.265视频播放器EasyPlayer.js的中性化设置?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、fmp4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能......
  • CS231N Assigenment1 two_layer_net笔记
    two_layer_net.ipynb之前对 x.reshape(x.shape[0],-1)语句的输出结果理解一直有误:1x=[[1,4,7,2],[2,5,7,4]]2x=np.array(x)3x0=x.reshape(x.shape[0],-1)4x1=x.reshape(x.shape[1],-1)5print(x0)6print(x1)的输出实际为[[1472][2574]][[1......
  • 软件——(Adobe) Flash (Player) 下载方式 截至202401可用
    软件——(Adobe)Flash(Player)下载方式截至202401可用曾经发布在:https://blog.csdn.net/qq_40501368/article/details/104811156。现在此维护。坏了私我或评论。我尽量修。仅有Windows版。没有测试最低兼容。这里的都是较新版。支持库PS:因为大部分浏览器已经移除Flash......
  • 分层测试(Layered Testing Approach)
    提纲为什么要做分层测试怎么做分层测试分层测试的好处为什么要做分层测试从软件工程的角度,结合软件开发的V模型、MVC架构、测试金字塔,综合起来便于理解1.借鉴与软件开发的V模型从V模型的底部往右上方向,先做单元测试,再做集成测试一直到最后的验收测试。  2.来源于MVC架构......
  • MySQL中create_time 和 update_time实现自动更新时间
    也是最近在捣鼓前后端分离项目,在写后端接口的时候便设计到数据库表建设,这里规范显得很重要.通常的建表规范,必备三字段:id,create_time,update_time.id必为主键,类型为bigintunsigned、单表时自增、步长为1create_time类型为datetime,数据新增时自动创建update......
  • H.265流媒体播放器EasyPlayer.js集成后无法重新拉流的原因排查
    流媒体播放器EasyPlayer是TSINGSEE青犀流媒体组件系列中关注度较高的产品,经过多年的发展和迭代,目前已经有多个应用版本,包括RTSP版、RTMP版、Pro版,以及js版,其中js版本作为网页播放器,受到了用户的广泛使用。在功能上,EasyPlayer支持直播、点播、录像、快照截图、MP4播放、多屏播放、......
  • LSP 网络劫持(Layered Service Provider Hijacking)
    LSP简介:分层服务提供商(LayeredServiceProvider,LSP)是一种可以扩展Winsock作为应用程序的Windows的网络套接字工具的机制。WinsockLSP可用于非常广泛的实用用途,包括Internet家长控制(parentalcontrol)和Web内容筛选。在以前版本的WindowsXP中,删除不正确的(也称......