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加pyGame实现的简单拼图游戏实例
May 15 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
python中scikit-learn机器代码实例
Aug 05 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python多线程并发实例及其优化
Jun 27 Python
Python socket 套接字实现通信详解
Aug 27 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
Python用dilb提取照片上人脸的示例
Oct 26 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/08/23 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
asp 的 分词实现代码
2007/05/24 Javascript
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
通过shell+python实现企业微信预警
2019/03/07 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
opencv python图像梯度实例详解
2020/02/04 Python
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
口头翻译求职人自荐信
2013/12/07 职场文书
闭幕式主持词
2014/04/02 职场文书
保险公司开门红口号
2014/06/21 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
工程质检员岗位职责
2015/04/08 职场文书
母亲去世追悼词
2015/06/23 职场文书