xadmin使用formfield_for_dbfield函数过滤下拉表单实例
环境:Django2.0.7xadmin2.0.1
需求:下拉表单显示的是模型的其他表项或者外键
方法:在adminx.py文件中,在classYourModelAdmin中重写函数
#重写formfield_for_dbfield,设计add和edit表单
defformfield_for_dbfield(self,db_field,**kwargs):
ifnotself.request.user.is_superuser:
#对case这个表项的下拉框选择进行过滤
ifdb_field.name=="case":
kwargs["queryset"]=Case.objects.filter(case_owner=self.request.user).order_by('id')
#对assigned_recipient这个表项的下拉选择进行过滤
#并且需要用到外键
ifdb_field.name=="assigned_recipient":
stu_ids=StudentDoctor.objects.filter(doctor=self.request.user).values('student_id')
ids=[]
#这里使用循环,为了下方再次查询时在list中使用in
foridinstu_ids:
ids.append(id['student_id'])
#根据主键在ids列表中查询得到Queryset。注意kwargs["queryset"]一定是queryset
kwargs["queryset"]=User.objects.filter(pk__in=ids)
returndb_field.formfield(**dict(**kwargs))
else:
attrs=self.get_field_attrs(db_field,**kwargs)
returndb_field.formfield(**dict(attrs,**kwargs))
补充知识:Django使用模板实现下拉菜单并动态填充后台数据
角色 {%fornameindata_list%} {{name}} {%endfor%}
注意:注意
以上这篇xadmin使用formfield_for_dbfield函数过滤下拉表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。