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 ...
随机推荐
- Python对wav文件的重采样
例如从2channel,4.41k hz 重采样到 1 channel,16k hz def downsampleWav(src, dst, inrate=44100, outrate=16000, ...
- Linux中VIM的使用
转自:http://www.lupaworld.com/?uid-296380-action-viewspace-itemid-118973 vi/vim 基本使用方法本文介绍了vi (vim)的基本 ...
- (Python基础)集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 以下代码演示了去重,增删改查,以及关系测试供参考学习 ...
- [UnityShader基础]07.MaterialPropertyDrawer
参考链接: https://blog.csdn.net/e295166319/article/details/60141677 https://docs.unity3d.com/ScriptRefer ...
- 【HDFS API编程】删除文件
所有操作都是以fileSystem为入口进行,我们使用fileSystem下的delete方法进行删除文件操作,删除的时候必须慎重. 直接上代码: /** * 删除文件 * @throws Excep ...
- C++_注释、枚举、typedef
#include<iostream> //using namespace std; int main() { /* ************************************ ...
- 13Linux_vsftpd_Samba_NFS实现文件共享_TFTP
vsftpd服务程序: 匿名开放模式 本地用户模式 虚拟用户模式 简单文件传输协议 TFTP:UDP协议,端口69 TFTP服务使用xinetd服务程序来管理. Samba文件共享服务 NFS网络文件 ...
- 2018-2019-2 网络对抗技术 20165304 Exp2 后门原理与实践
后门的基本概念及实验内容 常用后门工具 netcat Win获得Linux Shell Linux获得Win Shell Meterpreter 实验内容 任务一:使用netcat获取主机操作Shel ...
- systemctl启动tomcat后,jps看不到进程
centos7 写了tomcat的启动脚本,脚本从网上copy的. [Unit]Description=tomcat-1After=syslog.target network.target remot ...
- MYSQL5.7脚本运行时出现[Warning] Using a password on the command line interface can be insecure
MYSQL版本:5.7 在写linux脚本执行MYSQL命令的时候,如果使用 MYSQL="mysql -hlocalhost -P3306 -uroot -p666666" 登陆 ...
