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微信好友数据分析详解
Nov 19 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
基于python生成器封装的协程类
Mar 20 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
让你的Python代码实现类型提示功能
Nov 19 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
call在Python中改进数列的实例讲解
Dec 09 Python
jupyter notebook更换皮肤主题的实现
Jan 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程序员工具
2008/05/26 PHP
PHP安全防范技巧分享
2011/11/03 PHP
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
JavaScript this绑定过程深入详解
2018/12/07 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
留学自荐信写作方法
2014/01/27 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
摩登时代观后感
2015/06/03 职场文书
社区宣传标语口号
2015/12/26 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python