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创建文件和追加文件内容实例
Oct 21 Python
深入解析Python中的urllib2模块
Nov 13 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python将视频转换为全字符视频
Apr 26 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
python3.8下载及安装步骤详解
Jan 15 Python
Python class的继承方法代码实例
Feb 14 Python
解决paramiko执行命令超时的问题
Apr 16 Python
怎么快速自学python
Jun 22 Python
python时间time模块处理大全
Oct 25 Python
python线程优先级队列知识点总结
Feb 28 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中文验证码实现示例分享
2014/01/12 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python文件处理
2016/02/29 Python
python Opencv将图片转为字符画
2021/02/19 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python 自动批量打开网页的示例
2019/02/21 Python
如何给Python代码进行加密
2020/01/10 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
介绍一下Java中标识符的命名规则
2014/02/03 面试题
医学专业五年以上个人求职信
2013/12/03 职场文书
企业文化演讲稿
2014/05/20 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
python playwrigh框架入门安装使用
2022/07/23 Python