zoukankan      html  css  js  c++  java
  • 42)django-Model _meta API

    一: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'
    View Code

      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>)
    View Code


  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/8094259.html
Copyright © 2011-2022 走看看