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代码(逐级优化)
May 25 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
python实现名片管理系统
Nov 29 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
在django中自定义字段Field详解
Dec 03 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
如何清空python的变量
Jul 05 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
Python经典五人分鱼实例讲解
Jan 04 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
详解Python牛顿插值法
May 11 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
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
Java面试笔试题大全
2016/11/23 面试题
小学生爱国演讲稿
2014/04/25 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
小学生家长意见
2015/06/03 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang