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中for循环详解
Jan 17 Python
python多线程threading.Lock锁用法实例
Nov 01 Python
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
Python数据类型详解(二)列表
May 08 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Python初学者常见错误详解
Jul 02 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 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
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
JS类的封装及实现代码
2009/12/02 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
js实现简单计算器
2015/11/22 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python显示进度条的方法
2014/09/20 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
django中的setting最佳配置小结
2017/11/21 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python 求定积分和不定积分示例
2019/11/20 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
公司经理聘任书
2014/03/29 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
捐书仪式主持词
2015/07/04 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python