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实现全角半角转换的方法
Aug 18 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
django ajax发送post请求的两种方法
Jan 05 Python
Python拼接字符串的7种方式详解
Mar 19 Python
python实现自动打卡的示例代码
Oct 10 Python
Python实现自动整理文件的脚本
Dec 17 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
Python 键盘事件详解
Nov 11 Python
Python中三种花式打印的示例详解
Mar 19 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
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
pytorch 共享参数的示例
2019/08/17 Python
基于pandas中expand的作用详解
2019/12/17 Python
Python虚拟环境venv用法详解
2020/05/25 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
简历自荐信
2013/12/02 职场文书
创业大赛策划书
2014/03/01 职场文书
基层党组织整改方案
2014/10/25 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
美容院管理规章制度
2015/08/05 职场文书