zoukankan      html  css  js  c++  java
  • modelform 对象和model之间的关系

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

                    #根据自己的字段限制范围判断自己该不该出现在页面上。
  • 相关阅读:
    文件输入使System.out.println("程序执行完毕!");这句话的内容输入到文件中
    TI CC2541.h的头文件 for IAR
    状态添加Android游戏开发十日通(4)行走,跳跃,碰撞检测
    命令分析分析企业内连接Exchange 移动设备!
    寄存器数据问题反馈集锦W5200/W5300相关
    发票选择SAP 校验发票时:科目5101140100已设置为与税务不相关
    重写方法Android中的HttpsURLConnection连接
    生成数组C面试题精选
    函数路径Croc Champ 2013 Round 2 题解java教程
    排名中国重读“发展Linux,中日两国之比较”有感java教程
  • 原文地址:https://www.cnblogs.com/zjchao/p/8640402.html
Copyright © 2011-2022 走看看