xadmin使用formfield_for_dbfield函数过滤下拉表单实例


Posted in Python onApril 07, 2020

环境:Django 2.0.7 xadmin 2.0.1

需求:下拉表单显示的是模型的其他表项或者外键

方法:在adminx.py文件中,在class YourModel Admin中重写函数

# 重写formfield_for_dbfield,设计add和edit表单
  def formfield_for_dbfield(self, db_field, **kwargs):
    if not self.request.user.is_superuser:
     # 对case这个表项的下拉框选择进行过滤
      if db_field.name == "case": 
        kwargs["queryset"] = Case.objects.filter(case_owner=self.request.user).order_by('id')                        
      # 对assigned_recipient这个表项的下拉选择进行过滤
      # 并且需要用到外键
      if db_field.name == "assigned_recipient":
        stu_ids = StudentDoctor.objects.filter(doctor=self.request.user).values('student_id')
        ids = []
        # 这里使用循环,为了下方再次查询时在list中使用in
        for id in stu_ids:
          ids.append(id['student_id'])
  # 根据主键在ids列表中查询得到Queryset。注意kwargs["queryset"]一定是queryset
        kwargs["queryset"] = User.objects.filter(pk__in=ids)
      return db_field.formfield(**dict(**kwargs))

    else:
      attrs = self.get_field_attrs(db_field, **kwargs)
      return db_field.formfield(**dict(attrs, **kwargs))

补充知识:Django使用模板 实现下拉菜单并动态填充后台数据

<label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">角色<span class="required"></span>
</label>
<select name="name">
  {% for name in data_list %}
  <option id="name" value="{{ name }}">{{ name }}</option>
  {% endfor %}
</select>

注意: 注意 <select>中加入了一个name "name" 后台也正是通过这个name来获得数据的

以上这篇xadmin使用formfield_for_dbfield函数过滤下拉表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用PYTHON创建XML文档
Mar 01 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
Python应用领域和就业形势分析总结
May 14 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python如何求100以内的素数
May 27 Python
浅谈Django前端后端值传递问题
Jul 15 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 #Python
Django Xadmin多对多字段过滤实例
Apr 07 #Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 #Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 #Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 #Python
django 实现简单的插入视频
Apr 07 #Python
django实现后台显示媒体文件
Apr 07 #Python
You might like
Smarty中的注释和截断功能介绍
2015/04/09 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python插入数据到列表的方法
2015/04/30 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python内置类型性能分析过程实例
2020/01/29 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
老师自我鉴定范文
2013/12/25 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
教师对学生的评语
2014/04/28 职场文书
个人简历求职信范文
2015/03/20 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
员工手册董事长致辞
2015/07/29 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书