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通过递归遍历出集合中所有元素的方法
Feb 25 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
python记录程序运行时间的三种方法
Jul 14 Python
django定期执行任务(实例讲解)
Nov 03 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
python reduce 函数使用详解
Dec 05 Python
解决Django加载静态资源失败的问题
Jul 28 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
如何清空python的变量
Jul 05 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 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
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Python文件和流(实例讲解)
2017/09/12 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python实现进程同步和通信的方法
2018/01/02 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
如何使用PHP session
2015/04/21 面试题
家长给幼儿园的表扬信
2014/01/09 职场文书
经销商订货会主持词
2014/03/27 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记