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函数过滤下拉表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。