一、modelform的每一个标签对象
for bound_field in form: print('form.model',form.Meta.model) # for 循环得到每一个标签对象
print('bound_field',type(bound_field)) # bound_field <class 'django.forms.boundfield.BoundField'> from django.forms.boundfield import BoundField # 看一下内部封装的方法 # form.Meta.model 自身的表对对象 # self.form = form form对象 # self.field = field 字段对象 # 可以判断 一对多,一对一,多对多 isinstance( bound,field.field ModelChoiceField)
# 判断出满足条件后 可取到以下:
form.Meta.model._meta.get_field(bound_field.name).rel.related_name 反向查询名称related_name :
# self.name = name 字段名称
# to_field_name 关联字段
# limit_choices_to 关联表的取值范围 取不到为None
# bound_field.field.queryset.model 关联的表对象
# self.html_name = form.add_prefix(name)
# self.html_initial_name = form.add_initial_prefix(name)
# self.html_initial_id = form.add_initial_prefix(self.auto_id)
二、model增加的一个对象
obj = form.save()
for obj_related_field in obj._meta.related_objects:
# 得到每一个关联此表的字段对象 _related_name=str(obj_related_field.related_name) # 取到反向查询的字段名
obj_related_field.field_name 取代关联字段 默认是id
model_name=obj_related_field.field.model #取到关联表的类名
_model_name=obj_related_field.field.model._meta.model_name #取到关联表的表名
obj_related_field.limit_choices_to # 取到自己的字段限制范围 print(_model_name,_related_name) res = {"state":False,"pk": None, "text": None, "pop_id":None} if related_name==_related_name and _model_name==current_model_name: # 找打此时验证的是哪张表的基础上添加的自己。 print("limit_choices_to:",obj_related_field.limit_choices_to) ret=self.model.objects.filter(pk=obj.pk,**obj_related_field.limit_choices_to)
#根据自己的字段限制范围判断自己该不该出现在页面上。