_meta有什么用
模型_meta API是Django ORM的核心。它使系统的其他部分(如查找,查询,表单和管理员)能够了解每个模型的功能,API可通过每个模型类的_meta属性访问,该属性是django.db.models.options.Options对象的实例。
它提供的方法可以用于:
- 检索模型的所有字段实例
- 按名称检索模型的单个字段实例
方法:
_meta.get_field(field_name): 返回给定字段名称的实例对象
field_name可以是模型上的字段名称,抽象或继承模型上的字段,或在指向模型的另一个模型上定义的字段。 在后一种情况下,field_name将是由用户定义的related_name或由Django本身自动生成的名称。
如果找不到具有给定名称的字段,则会引发FieldDoesNotExist异常
def index(request):
obj=Book._meta.get_field("title")#普通字段
print(">>>>",obj,type(obj)) #得到一个实例对象
print(obj.max_length) #通过对象方法,可以得到他的属性
return HttpResponse("ok")
结果:
>>>> app02.Book.title <class 'django.db.models.fields.CharField'> 32
_meta.get_fields(include_parents=True, include_hidden=False)[source]
返回与模型关联的字段的元组。 get_fields()接受两个参数,可用于控制返回的字段:
include_parentsTrue。 递归地包括在父类上定义的字段。 如果设置为False,get_fields()将只搜索在当前模型上直接声明的字段。 来自直接从抽象模型或代理类继承的模型的字段被认为是本地的,而不是父级的。include_hiddenFalse。 如果设置为True,则get_fields()将包含用于返回其他字段功能的字段。 这还将包括具有以“+”开头的related_name(例如ManyToManyField或ForeignKey)的任何字段。-
def index(request): obj=Book._meta.get_fields( )#普通字段 print(">>>>",obj) #得到一个实例对象 return HttpResponse("ok")
>>>> (<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: title>, <django.db.models.fields.IntegerField: price>,
<django.db.models.fields.related.ForeignKey: publishs>,
<django.db.models.fields.related.ManyToManyField: authors>)
_meta.model_name: 返回当前模型的表名
_meta.app_label:返回当前模型所在的App的名字
print(Book._meta.model_name )
print (Book._meta.app_label)
结果:
book
app01
通过字段对象关联到多对多对象
def index(request):
obj=Book._meta.get_field("authors")#多对多字段
print(">>>>",obj.rel.to.objects.all()) #得到多对多表的Queryset
return HttpResponse("ok")
结果:
>>>> <QuerySet [<Author: 李白>, <Author: 韩信>]>
一对多对象反向查询字段
现在有book表和publish表,一对多的关系,
Publish._meta.related_objects :得到的是和publish表关联的所有字段
在这个类中:
from django.db.models.fields.reverse_related import ManyToManyRel
Publish._meta.related_objects[0].field_name: 得到和publish表关联的某一个字段中to_field的值,不加to_field,默认关连表的id值
Publish._meta.related_objects[0].related_name:得到和publish表关联的某一个字段中related_name的值,
Publish._meta.related_objects[0].limit_choices_to: 得到和publish表关联的某一个字段中limit_choices_to属性对应的属性值
Publish._meta.related_objects[0].to 得到和publish表关联的某一个字段中to属性对应的表,也就是Publish表
浙公网安备 33010602011771号