modelform 对象和model之间的关系

时间:2022-12-04 14:13:52

一、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)

                #根据自己的字段限制范围判断自己该不该出现在页面上。