xadmin(0.6.1)使用过程中bug发现及解决方式

1、list_filter设置外键字段时,显示bug

在list_filter中加入department__name(外键名__字段名)

class InterviewAdmin(object):
    ...
    list_filter = ('status', 'department__name', 'final_result')
    ...

会在过滤器中出现如下显示bug(同时显示字段名和字段的verbose_name值):

解决办法:

在xadmin/plugins/filters.py中注释掉125、127行

这样显示就正常了

还有个很严重的问题:

这个verbose_name值是所关联表的verbose_name值,但是我们想要显示的是当前表的verbose_name值。也就是应该显示面试部门而非部门名称。

解决办法:

xadmin\filters.py中注释掉114行,新加115、116、117行

 

2、style_fields设置多对多字段显示样式bug

当在style_fields中设置字段为m2m_transfer样式时,提交表单会提示如下信息(正产情况下不需要选择的,可参考django的权限管理):

解决办法:

问题应该出现在前端的js上,\xadmin\static\xadmin\js\xadmin.widget.select-transfer.js就是这个文件,有前端大神的话可以研究一下,我现在是没精力搞这个了。。。

另一个思路就是自己带写一段js代码,在表单提交时将已选项默认选中一项。

 

3、无法加载主题切换功能

开启主题切换功能,只需做如下设置,此种设置仅有两种默认的bootstrap主题:

如果想获取更多主题,需要添加如下配置:

然而,大概率会报如下错误:

HTTPSConnectionPool(host='bootswatch.com', port=443): Max retries exceeded with url: /api/3.json (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x000002079F1C1668>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))

博主通过阅读xadmin/plugins/themes.py源码进行错误排查,基本锁定错误发生在第75行。在访问bootswatch资源时超时。每次服务重启,第一次进入系统都要等1~2分钟也是因为这里的问题。

解决办法:

浏览器访问https://bootswatch.com/api/3.json查看所有可用主题。将可用主题的name,css参数记录到user_themes参数中即可。

最终效果:

 

 

4、readonly_fields不能包含models.BinaryField类型字段

readonly_fields不能包含models.BinaryField类型字段,否则可能会报编码错误。django本身就默认BinaryField在admin详情页为只读、隐藏、不可编辑的字段。

 

5、详情页保存之后,会直接跳转到列表页,所有的过滤器失效

修改xadmin/views/edit.py/UpdateAdminView/post_response()函数,将列表转为元祖:tuple(self.request.session['LIST_QUERY'][0])

 @filter_hook
    def post_response(self):
        """
        Determines the HttpResponse for the change_view stage.
        """
        opts = self.new_obj._meta
        obj = self.new_obj
        request = self.request
        verbose_name = opts.verbose_name

        pk_value = obj._get_pk_val()

        msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name':
                                                                       force_text(verbose_name), 'obj': force_text(obj)}
        if "_continue" in request.POST:
            self.message_user(
                msg + ' ' + _("You may edit it again below."), 'success')
            return request.path
        elif "_addanother" in request.POST:
            self.message_user(msg + ' ' + (_("You may add another %s below.")
                              % force_text(verbose_name)), 'success')
            return self.model_admin_url('add')
        else:
            self.message_user(msg, 'success')
            # Figure out where to redirect. If the user has change permission,
            # redirect to the change-list page for this object. Otherwise,
            # redirect to the admin index.
            if "_redirect" in request.POST:
                return request.POST["_redirect"]
            elif self.has_view_permission():
                change_list_url = self.model_admin_url('changelist')
                # 将列表转为元祖
                if 'LIST_QUERY' in self.request.session \
                and tuple(self.request.session['LIST_QUERY'][0]) == self.model_info:
                    change_list_url += '?' + self.request.session['LIST_QUERY'][1]
                return change_list_url
            else:
                return self.get_admin_url('index')

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值