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检测手机QQ在线状态的脚本代码
Feb 10 Python
Python标准库之Sys模块使用详解
May 23 Python
Python中类型检查的详细介绍
Feb 13 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
Python中os模块功能与用法详解
Feb 26 Python
python 匿名函数与三元运算学习笔记
Oct 23 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中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
python实现发送邮件及附件功能
2021/03/02 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
矫正人员思想汇报
2014/01/08 职场文书
生物制药自我鉴定
2014/01/25 职场文书
安全目标责任书
2014/07/22 职场文书
如何写好闭幕词
2019/04/02 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python