• django-Model _meta API


    原文:http://www.cnblogs.com/lixiang1013/p/8094259.html

    一:Model _meta API

      模型_metaAPI是Django ORM的核心。它使系统的其他部分(如查询,查询,表单和管理员)了解每个模型的功能。

      API可以通过_meta每个模型类的属性来访问,这是一个django.db.models.options.Options对象的一个实例 。

      它提供的方法可以用来:

    • 检索模型的所有字段实例
    • 按名称检索模型的单个字段实例

    二:Model _meta常用方式

      1)按名称检索模型的单个字段实例

        Options.get_fieldfield_name[source]  ,回给定字段名称的字段实例。

        field_name可以是模型上字段的名称,抽象或继承模型上的字段,或指向模型的另一个模型上定义的字段。

        在后一种情况下,field_name 将由related_name用户定义或由Django本身自动生成的名称。

        Hidden fields 不能被名字检索。

        如果没有找到具有给定名称的字段, FieldDoesNotExist则会引发异常

    复制代码
    >>> from django.contrib.auth.models import User
    
    # A field on the model
    >>> User._meta.get_field('username')
    <django.db.models.fields.CharField: username>
    
    # A field from another model that has a relation with the current model
    >>> User._meta.get_field('logentry')
    <ManyToOneRel: admin.logentry>
    
    # A non existent field
    >>> User._meta.get_field('does_not_exist')
    Traceback (most recent call last):
        ...
    FieldDoesNotExist: User has no field named 'does_not_exist'
    复制代码

    get_field获取的字段对象,可以查看verbose_name等属性:

    >>> obj=User._meta.get_field('username')
    >>> print(obj.verbose_name)
    "用户名"
    
    #验证对象是否是CharField类型:

    >>> from django.db.models.fields.related import CharField >>> isinstance(obj,models.CharField) >>> True

    2)检索模型的所有字段实例

        Options.get_fieldsinclude_parents = Trueinclude_hidden = False[source] 

    返回与模型关联的字段的元组。get_fields()接受可以用来控制返回哪些字段的两个参数:

    include_parents
    True默认。递归地包含在父类上定义的字段。如果设置为Falseget_fields()只会搜索直接在当前模型上声明的字段。直接从抽象模型或代理类继承的模型中的字段被认为是本地的,而不是父类。
    include_hidden
    False默认。如果设置为Trueget_fields()将包含用于支持其他字段功能的字段。这也将包括任何有一个related_name(如ManyToManyField,或 ForeignKey)以“+”开头的字段。
    复制代码
    >>> from django.contrib.auth.models import User
    >>> User._meta.get_fields()
    (<ManyToOneRel: admin.logentry>,
     <django.db.models.fields.AutoField: id>,
     <django.db.models.fields.CharField: password>,
     <django.db.models.fields.DateTimeField: last_login>,
     <django.db.models.fields.BooleanField: is_superuser>,
     <django.db.models.fields.CharField: username>,
     <django.db.models.fields.CharField: first_name>,
     <django.db.models.fields.CharField: last_name>,
     <django.db.models.fields.EmailField: email>,
     <django.db.models.fields.BooleanField: is_staff>,
     <django.db.models.fields.BooleanField: is_active>,
     <django.db.models.fields.DateTimeField: date_joined>,
     <django.db.models.fields.related.ManyToManyField: groups>,
     <django.db.models.fields.related.ManyToManyField: user_permissions>)
    复制代码

    三  model._meta的其他属性

    cls_name = model._meta.model_name #当前表映射类名称的小写
    app_name = model._class._meta.app_label  #当前表所在app的名称
  • 相关阅读:
    购物商城实战
    Git(使用码云)
    Git(创建与合并分支)
    Git(工作区和暂存区概念)
    Git(删除文件)
    关于sqoop导入数据的时候添加--split-by配置项对sqoop的导入速度的影响。
    在hue当中设置hive当中数据库的控制权限。
    关于在hue当中执行定时任务,时间的设置。
    关于在hue当中调shell脚本oozie出现017: Could not lookup launched hadoop Job ID [job_1537350421540_0007] which was associated with action [0000003-180919174749982-oozie-oozi-W@shell-9865]. Failing this action!
    关于在在hue当中执行shell脚本使用oozie调度,一直出现laucher异常退出。
  • 原文地址:https://www.cnblogs.com/guoyunlong666/p/9204538.html
Copyright © 2020-2023  润新知