django中Model _meta API

Model _meta API的官方文档  https://docs.djangoproject.com/en/1.10/ref/models/meta/

Field access API

>>> 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‘

通过这个field access api的choices可以获取有choice字段的表的内容(元组形式的内容),对于外键字段通过get_choices过去内容的元组的列表

比如在model中有个Customer表

class   Customer(models.Model):
    ‘‘‘客户表‘‘‘
    name = models.CharField(max_length=32,verbose_name=‘客户姓名‘,blank=True,null=True)
    qq = models.CharField(max_length=64,verbose_name=‘QQ‘,unique=True)
    qq_name = models.CharField(max_length=64,verbose_name=‘QQ名称‘,blank=True,null=True)
    phone = models.CharField(max_length=64,blank=True,null=True,verbose_name=‘手机号码‘)
    source_choice = (
        (0,‘转介绍‘),
        (1,‘QQ群‘),
        (2,‘官网‘),
        (3,‘百度推广‘),
        (4,‘51CTO‘),
        (5,‘知乎‘),
        (6,‘市场推广‘),
    )
    source = models.SmallIntegerField(verbose_name=‘选择来源‘,choices=source_choice)
    referral_from = models.CharField(verbose_name=‘介绍人‘,max_length=64,blank=True,null=True)
    consult_course = models.ForeignKey(‘Course‘,verbose_name=‘咨询课程‘)
    consultant = models.ForeignKey(‘UserProfile‘,verbose_name=‘顾问‘)
    content  = models.TextField(verbose_name=‘咨询详情‘)
    status_choices = (
          (0, ‘已报名‘),
          (1, ‘未报名‘),
    )
    status = models.SmallIntegerField(choices=status_choices, default=1)
    date = models.DateTimeField(auto_now_add=True)
    memo = models.TextField(verbose_name=‘备注‘,blank=True,null=True)
    tags = models.ManyToManyField(‘Tag‘)#,blank=True,null=True
    def __unicode__(self):
        return self.qq

通过_meta.get_field(‘字段名‘)来获取choice所有的内容

obj = Customer._meta.get_field(‘source‘)

print  obj.choices

#输出的结果为
( (0,‘转介绍‘),(1,‘QQ群‘), (2,‘官网‘),(3,‘百度推广‘),(4,‘51CTO‘),(5,‘知乎‘),(6,‘市场推广‘), )

#那么得到的这个元组就可以用for循环来获取每个小元组项,然后再前端展示

对外键tags的内容获取,通过get_choices()

obj = Customer._meta.get_field(‘tags‘)

print  obj.get_choices()

#输出的结果为:

[(‘‘, ‘---------‘), (1, ‘goser1158‘), (2, ‘haha‘)]

#同样也可以对列表进行for循环获取里面的小元组来展现到前端页面

当然还可以外键字段获取外键的名称

obj = Customer._meta.get_field(‘consultant‘)

print  type(obj).__name__

#输出的结果为:
‘ForeignKey‘

obj = Customer._meta.get_field(‘tags‘)

print  type(obj).__name__

#输出的结果为:
‘ManyToManyField‘

#通过判断外键的名称就可以做进一步的处理操作
时间: 2024-11-28 23:23:04

django中Model _meta API的相关文章

Django——Django中的QuerySet API 与ORM(对象关系映射)

首先名词解释. ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”. 面向对象是从软件工程基本原则(如耦合.聚合.封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别.为了解决这个不匹配的现象,对象关系映射技术应运而生. 对象关系映射(Obj

Django中model的Meta选项

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类: 1,unique_together unique_together这个选项用于:当你需要通过两个字段保持唯一性时使用.比如假设你希望,一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:unique_together = (("first_name", "last_name"),)一个ManyToManyF

Django中model层详解

#!/usr/bin/env python# _*_ coding:utf-8 _*_ from django.db import models class UserType(models.Model): nid = models.AutoField(primary_key=True) # 自增 主键 caption = models.CharField(max_length=16) class UserInfo(models.Model): username = models.CharFiel

django-Model _meta API

一:Model _meta API 模型_metaAPI是Django ORM的核心.它使系统的其他部分(如查询,查询,表单和管理员)了解每个模型的功能. API可以通过_meta每个模型类的属性来访问,这是一个django.db.models.options.Options对象的一个实例 . 它提供的方法可以用来: 检索模型的所有字段实例 按名称检索模型的单个字段实例 二:Model _meta常用方式 1)按名称检索模型的单个字段实例 Options.get_field(field_name

Django中ORM介绍和字段及其参数

ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. ORM的由来 字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational). 几乎所有的软件开发过程中都会涉及到对象和关系数据库.在用户层面和业务逻辑层

Django中ORM介绍

目录 一 ORM介绍 1.1 ORM 概念 1.2 ORM的由来 1.3 ORM的优势 1.4 ORM的劣势 1.5 ORM总结 二 Django中的ORM 2.1 Django使用MySQL数据库 2.2 Model 2.3 快速入门 一 ORM介绍 1.1 ORM 概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动

Django中的app及mysql数据库篇(ORM操作)

Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都新建一个文件夹来存放项目文件,切换到这个目录下,启动命令行工具.创建一个名为mysite的Django项目: django-admin startproject mysite 创建好项目之后,可以查看当前目录下多出一个名为mysite的文件夹,mysite的文件夹目录结构如下: mysite/ ma

Django中ORM

Object Relational Mapping(ORM) ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. ORM由来 让我们从O/R开始.字母O起源于"对象"(Object),而R则来自于"关系"(Re

Django中ORM介绍和字段及字段参数

https://www.cnblogs.com/liwenzhou/p/8688919.html Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库