Django中_Meta 部分用法

Django ORM 操作详解
本文介绍了Django框架中ORM操作的基本用法,包括如何获取模型的元信息、字段信息等,并提供了具体的代码示例来展示如何进行这些操作。
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)
#拿到反向关联字段所在类名称
复制代码

识别图中二维码,领取python全套视频资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值