django xadmin多对多字段过滤(含filter的反向查询)
要实现的功能:
继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能。
功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前

程序会将所有用户都显示出来,修改后,程序只显示其下级用户:

上代码:
#多对多字段过滤
def formfield_for_dbfield(self,db_field,**kwargs): if db_field.name=='assign_units':
kwargs["queryset"]=User.objects.filter(profile_user__pid=self.user.id) return super(AssignAdmin,self).formfield_for_dbfield(db_field,**kwargs)
formfield_for_dbfield是xadmin内置的函数用来实现多对多过滤,
db_field.name=='assign_units'即在本模型中外键的名称
User.objects.filter(profile_user__pid=self.user.id)过滤条件
最后返回结果。
很少的一段代码,但是在过滤条件部分折腾了一个上午
由于实现该查询要用反向查询,刚开始使用该语句
kwargs["queryset"]=User.objects.filter(profile_user=self.user.id)
但是查看其sql后发现不是想要的结果,
多次尝试无果,想采用利用raw执行原生SQL的方法实现:
sql = "SELECT auth_user.id FROM auth_user INNER JOIN bjra_userprofile ON " \
"(auth_user.id = bjra_userprofile.user_id) WHERE bjra_userprofile.pid_id=%s"%str(self.user.id)
kwargs["queryset"]=User.objects.raw(sql)
但是User.objects.raw(sql)返回的是RawQueryset,程序依然报错
最终采用filter的反向查询实现:
User.objects.filter(profile_user__pid=self.user.id)
如图:profile_user是filter的relate_name,profile_user__pid=self.user.id指:UserProfile.user=User且UserProfile.pid=self.user.id,实现了我要实现的功能。
django xadmin多对多字段过滤(含filter的反向查询)的更多相关文章
- Django xadmin 根据登录用户过滤数据
在adminx.py文件对应的的class中添加如下代码: def queryset(self): qs = super(taskAdmin, self).queryset() if self.req ...
- django orm介绍以及字段和参数
Object Relational Mapping (ORM) orm介绍 orm概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数 ...
- django模型多对多调用
对于如下的模型: from django.db import models # Create your models here. class Student(models.Model): name = ...
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/ 1.多表连接查询:感觉django太NX了. ...
- python django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct[转]
1.多表连接查询:当我知道这点的时候顿时觉得django太NX了. class A(models.Model): name = models.CharField(u'名称') clas ...
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
1.多表连接查询:当我知道这点的时候顿时觉得django太NX了. class A(models.Model): name = models.CharField(u'名称') class B ...
- Django - Xadmin (四) Filter
Django - Xadmin (四) Filter Filter 功能描述 与 admin 组件中 Filter 功能类似,在展示页面右侧放置一列标签,通过点击这些标签来筛选出该标签相关的数据. 比 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- Django+xadmin打造在线教育平台(二)
三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...
随机推荐
- Java 环境配置 与 碰到的问题
小白记录,希望各位指点,长期整理修改 不定期更新,碰到的与之相关的会添加,做个小笔记,再次碰到可以更好的解决. JDK 下载:Oracle 配置方法:菜鸟教程 - Java 开发环境配置 作用 JAV ...
- centos上 小程序部署 nginx+https+ssL 提示错误:对应的服务器 TLS 为 TLS 1.0 ,小程序要求的 TLS 版本必须大于等于 1.2
解决办法: 1.nginx版本必须是1.0.6以上 2.修改配置文件,修改server内的ssl_protocols内容,增加TLSv1.2 3.重启nginx. ./nginx -s reload ...
- bootstrap-treeview 如何实现全选父节点下所有子节点及反选
转(https://www.augsky.com/992.html) 选中父节点时,父节点下所有子节点也都全部选中 1,HTML代码 <h2>TreeView Checkable</ ...
- PLSQL安装教程,无需oracle客户端(解决本地需要安装oracle客户端的烦恼)
最近用笔记本开发,项目用的是Oracle数据库,不想本地安装Oracle客户端. 就只装了一个PLSQL 连接数据库的时候各种错误,现在解决了记录一下. 详细内容见 附件
- ganglia之web界面介绍
转自:https://blog.csdn.net/lswnew/article/details/79175555 http://www.51niux.com/?id=83 第一篇文章讲述了gangli ...
- zookeeper启动报 Unexpected exception, exiting abnormally 错误
启动zookeeper---jps,未出现QuorumPeerMain进程 原因: 电脑中的某些进程占用了2181 port 通过 sudo netstat -nltp|grep 2181查看进程并k ...
- selenium2 webdriver 常用的python 函数
新建实例driver = webdriver.Chrome() 1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_elem ...
- Python初学(1)
最近在学习python,以后想编写一些工作中用的到的脚本.python的入门我选择了<python从初学到入门>,这篇文章我会跟进我的学习进度.算是一个笔记吧. 我本身是熟悉C语言的,看p ...
- 前端生成excel
一:安装依赖 1:在package.json 中加入四个依赖包 (1): "json2csv": "^3.11.0", (2):"file-saver ...
- Could not read document: Can not deserialize instance of java.lang.String out of START_ARRAY
线上问题: { "timestamp": "1544510665", "status": 400, "error": & ...
