ORM对象关系映射

映射关系:

     表名  <-------> 类名

       字段  <-------> 属性

    表记录 <------->类实例对象
class Customer(models.Model):
'''客户信息表'''
name = models.CharField(max_length=32,blank=True,null=True)
qq = models.CharField(max_length=64,unique=True)
consult_course = models.ForeignKey("Course",verbose_name="咨询课程")
content = models.TextField(verbose_name="咨询详情") tags = models.ManyToManyField("Tag",blank=True,null=True,verbose_name="分类标签") status_choices = ((0,'已报名'),
(1,'未报名'),
)
status = models.SmallIntegerField(choices=status_choices,default=1) consultant = models.ForeignKey("UserProfile",verbose_name="学员顾问") memo = models.TextField(blank=True,null=True,verbose_name="备注")
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return self.qq class Meta:
verbose_name ="客户表"
verbose_name_plural ="客户表"
admin.site.register(models.Customer)


模型字段参考文档

  http://python.usyiyi.cn/documents/django_182/ref/models/fields.html#manytomany-arguments

字段类型

name = models.CharField(max_length=32)  #字符串  #限定字段的长度

memo = models.TextField(blank=True,null=True)    #大文本字段

date = models.DateField(auto_now_add=True)  #时间字段  #自动填充选项
start_date = models.DateField(verbose_name="开班日期") amount = models.PositiveIntegerField(verbose_name="数额",default=500) #正整数字段 #0到2147483647的值 has_homework = models.BooleanField(default=True) # true/false 字段 #可迭代的结构,列表或是元组 #显示选择框
status_choices = ((0,'已报名'),
(1,'未报名'),
)
status = models.SmallIntegerField(choices=status_choices,default=1) #正整数字段 #从0 到 32767 这个区间

关联字段

course = models.ForeignKey("Course",verbose_name="所报课程")  #多对一关系    #自动创建数据库索引   #Django 会在字段名上添加"_id" 来创建数据库中的列名

roles = models.ManyToManyField("Role",blank=True,null=True)   #多对多关联          #与ForeignKey 的工作方式完全一样

user = models.OneToOneField(User)   #一对一关联关系    #ForeignKey 设置了unique=True

字段选项

name = models.CharField(max_length=32,blank=True,null=True)
#该字段允许为空白 #空值存储为NULL (成对出现) name = models.CharField(unique=True,max_length=32,primary_key=True)
#表中必须有唯一值 #模型的主键字段
attendance = models.SmallIntegerField(choices=attendance_choices,default=0)
#字段的默认值0 contract_approved = models.BooleanField(default=False,verbose_name="合同已审核")
#一个字段的可读性更高的名称

__str__()  (python3) 和   __unicode__() (python2.x)

方法定义了当object调用str()时应该返回的值
它以unicode方式返回任何对象的陈述。Python和Django需要输出字符串陈述时使用。
例如在交互式控制台或管理后台显示的输出陈述。
    def __str__(self):
return "%s %s" %(self.customer,self.enrolled_class)

自定义字段类型    Meta 选项

    class Meta:
unique_together = ('branch','course','semester') #用来设置的不重复的字段组合,必须唯一(将两个字段做联合唯一)
verbose_name = "班级" #指明一个易于理解和表述的对象名称,单数形式
verbose_name_plural = "班级" #对象的复数表述名:

day1 ORM的更多相关文章

  1. Spring Data JPA 大纲归纳

    第一天: springdatajpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查 ...

  2. 老男孩Day13作业:ORM学员管理系统

    一.作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级      可创建指定班级的上课纪录,注意一节上 ...

  3. 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作

    spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ...

  4. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  5. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  6. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  7. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  8. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  9. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

随机推荐

  1. 以太网,IP,TCP,UDP数据包分析

    http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 网络层的IP 协议是构成Internet 的基础.IP 协议不保证传 ...

  2. 通过 lsyncd + rsync 同步文件

    通过rsyncd实现将源服务器上的文件同步到目标服务器,通过lsyncd监控源服务器上的文件是否有变动,若有变动调用rsyncd服务对差异的文件进行同步. 0. lsyncd有三种同步文件的方式: ( ...

  3. 【js】五子棋-UI学习

    http://www.imooc.com/learn/639 棋盘用canvas实现

  4. 如何彻底修改eclipse中的名称

    一.右键工程:Refactor->Rename,或选中工程按F2,修改名称二.修改项目目录下:.project文件 <?xml version="1.0" encodi ...

  5. 跳转到AppStore下载app

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunes.apple.com/cn/ap ...

  6. 提交json串格式的POST请求

    提交json串格式的POST请求 Action() { web_reg_save_param("retCode", "LB=retCode\":\"& ...

  7. C# 4.0 不要跨程序集用dynamic指向匿名类型 (转载)

    今天写代码时偷懒用了dynamic,结果遇到问题,运行时始终无法获取dynamic对象的属性.原问题简化后如下: 程序集A包含SampleClass类,有一个静态方法,接收一个dynamic类型参数并 ...

  8. iOS利用block实现链式编程方法(Objective-C链式编程)

    objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...

  9. 1.Hadoop集群安装部署

    Hadoop集群安装部署 1.介绍 (1)架构模型 (2)使用工具 VMWARE cenos7 Xshell Xftp jdk-8u91-linux-x64.rpm hadoop-2.7.3.tar. ...

  10. 使用Selenium时,如何选择ChromeDriver驱动版本对应Chrome浏览器版本

      ChromeDriver版本 支持的Chrome版本 v2.46 v72-74 v2.45 v71-73 v2.44 v70-72 v2.43 v69-71 v2.42 v68-70 v2.41 ...