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 random模块常用方法
Nov 03 Python
python操作ie登陆土豆网的方法
May 09 Python
Python本地与全局命名空间用法实例
Jun 16 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
Python数据正态性检验实现过程
Apr 18 Python
jupyter notebook的安装与使用详解
May 18 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 Python
Python绘画好看的星空图
Mar 17 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php中使用临时表查询数据的一个例子
2013/02/03 PHP
php 发送带附件邮件示例
2014/01/23 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php中文验证码实现方法
2015/06/18 PHP
微信支付开发告警通知实例
2016/07/12 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
Ext 今日学习总结
2010/09/19 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
详解vue路由
2020/08/05 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
21行Python代码实现拼写检查器
2016/01/25 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
卖房协议书
2014/04/11 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
就业证明函
2015/06/17 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python