xadmin使用formfield_for_dbfield函数过滤下拉表单实例
时间:2022-07-28
本文章向大家介绍xadmin使用formfield_for_dbfield函数过滤下拉表单实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
环境: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函数过滤下拉表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Unable to preventDefault inside passive event listener
- js 停止事件冒泡 阻止浏览器的默认行为(阻止a标签跳转 )
- EmitMapper的使用小结
- js .map方法
- 【一起学系列】之模板方法:写SSO我只要5分钟
- ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
- 【一起学系列】之迭代器&组合:虽然有点用不上啦
- 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法
- 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
- scipy.stats连续分布的基本操作
- InvocationHandler中invoke方法中的第一个参数proxy的用途
- height、offsetheight、clientheight、scrollheight、innerheight、outerheight
- mysql sql-mode 解析和设置
- JAVABEAN EJB POJO区别
- @Component和@Bean以及@Autowired、@Resource