zoukankan      html  css  js  c++  java
  • Django中_Meta 部分用法

     

    model.UserInfo._meta.app_label                       
    #获取该类所在app的app名称
    
    model.UserInfo._meta.model_name
    #获取该类对应表名(字符串类型)
    
    model.UserInfo._meta.get_field('username')
    #获取该类内指定字段信息(对象)
    
    model.UserInfo._meta.fields
    #获取该类内所有字段对象
    
    model.UserInfo._meta.get_fields
    #获取该类内所有字段信息(对象),包含反向关联的字段
    
    model.UserInfo._meta.many_to_many
    #获取该类内多对多字段信息
            
    model.UserInfo._meta.get_field('username').verbose_name
    #获取该类内‘username’字段,verbose_name 的值
    
     
    
    --------
      Book:
      list_filter=["state","publish","authors"]
      
      每一个字段相关信息:
       
           字段字符串  : "state"
           字段对象    : Book._meta.get_field("state")
           字段关联数据: 
                  if---choice类型字段:
                        字段对象.choices
                        
                  if---ForeignKey,ManytoMany:
                        字段对象.rel.to.objects.all()
           
    
      字段信息封装成类:
      
         class FilterField(object):
               def __init__(self,filter_field_name,filter_field_obj):
                   self.filter_field_name=filter_field_name
                   self.filter_field_obj=filter_field_obj
    
                   
               def get_data(self):
                   if isinstance(self.filter_field_obj,ForeignKey) or isinstance(self.filter_field_obj,ManyToManyField):
                       return self.filter_field_obj.rel.to.objects.all()
                   elif self.filter_field_obj.choices:
                       return self.filter_field_obj.choices
                   else:
                       pass
           
           
           state=FilterField("state",state_obj)
    
     
    
    obj = models.UserInfo.objects.create(...)
    
    #源码位置
    #from django.db.models.options import Options
    #from django.db.models.fields.reverse_related import ManyToOneRel
    
    field = obj._meta.related_objects[0]
    #拿到当前记录对象所对应的反向关联字段的queryset
    
    print(field[0].limit_choices_to)
    #拿到对应的limit_choices_to的字典的数据
    
    print(field[0].related_name)
    #拿到related_name属性所对应的值
    
    print(field[0].field_name)
    #拿到反向关联字段里的关联本表的字段
    
    print(field[0].field.model._meta.model_name)
    #拿到反向关联字段所在类名称
    
    
  • 相关阅读:
    CF799B T-shirt buying
    luogu3469 [POI2008]BLO_Blockade
    luogu2746 校园网
    USACO 2.2 Party Lamps 【高能等效+规律枚举】
    USACO 2.2 Subset Sums 【经典的方案DP+必要的转化】
    USACO 2.2 Preface Numbering 【实质是分治思想】
    bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
    bzoj 1088: [SCOI2005]扫雷Mine
    bzoj 2761: [JLOI2011]不重复数字 (map||Treap)
    bzoj 1230: [Usaco2008 Nov]lites 开关灯
  • 原文地址:https://www.cnblogs.com/shangping/p/12850234.html
Copyright © 2011-2022 走看看