python fields函数_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使用模板 实现下拉菜单并动态填充后台数据

角色

{% for name in data_list %}

{{ name }}

{% endfor %}

注意:注意 中加入了一个name "name" 后台也正是通过这个name来获得数据的

以上这篇xadmin使用formfield_for_dbfield函数过滤下拉表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: xadmin使用formfield_for_dbfield函数过滤下拉表单实例

本文地址: http://www.cppcns.com/jiaoben/python/306164.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值