xadmin中如果需要给指定的list页面增加一个链接按钮用来跳转到自定义的html页面时,可参考如下修改xadmin源码

# 一般跳转需要在list页面之间进行跳转,而这次跳转是跳转到自己定义的html页面上,所以需要修改如下:

#extra_app/xadmin/templates/xadmin/views/model_list.html
#在 {% block nav_btns %} 里面添加:(由于只是跳转的特例,所以url是写死的,其他地方按需修改)
    <!--#自定义-->
    {% if has_saler_permission %}
        <a href="/tradeapp/sellerpush/saler_money/" class="btn btn-primary"><i class="fa fa-plus"></i>
    {% blocktrans with cl.opts.verbose_name as name %}查看月销售提成{% endblocktrans %}</a>
    {% endif %}
   <!-- #The_end-->

##########################################
#extra_app/xadmin/views/base.py
#修改如下代码(#自定义之间的代码)
class ModelAdminView(CommAdminView):

    @filter_hook
    def get_object_url(self, obj):
        if self.has_change_permission(obj):
            return self.model_admin_url("change", getattr(obj, self.opts.pk.attname))
        elif self.has_view_permission(obj):
            return self.model_admin_url("detail", getattr(obj, self.opts.pk.attname))
        #自定义
        elif self.has_saler_permission(obj):
            return self.model_saler_url()
        #The_End
        else:
            return None
	#自定义
	 def model_saler_url(self, *args, **kwargs):
		 #此跳转链接是自定义html的页面的链接
            return '/tradeapp/sellerpush/saler_money/'
        #The_End

    def get_model_perms(self):
        """
        Returns a dict of all perms for this model. This dict has the keys
        ``add``, ``change``, and ``delete`` mapping to the True/False for each
        of those actions.
        """
        return {
            'view': self.has_view_permission(),
            'add': self.has_add_permission(),
            'change': self.has_change_permission(),
            'delete': self.has_delete_permission(),
            #自定义
            'saler': self.has_saler_permission(),
            #The_End
        }

	#此处修改了remove_permissions的判断方法,关键地方,因为需要在adminx中添加筛选条件,为了避免在多个adminx的注册类里添加过滤条件,
	#此处把return ('saler'not in self.remove_permissions)修改为return ('saler'not in self.remove_permissions),
	#这样只需要在对应的adminx注册类里添加属性: remove_permissions = ('saler',) 这样就可以避免很多麻烦
     def has_saler_permission(self, obj=None):
        codename = get_permission_codename('saler', self.opts)
        return ('saler'in self.remove_permissions) and self.user.has_perm('%s.%s' % (self.app_label, codename))
        #The_End

	#自定义的html 和views, urls 的修改就不叙述了。
最后记得在需要添加按钮的adminx的注册类里添加属性:
remove_permissions = ('saler',)

猜你喜欢

转载自blog.csdn.net/Yambo1992/article/details/80860717
今日推荐