day1 ORM
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的更多相关文章
- Spring Data JPA 大纲归纳
第一天: springdatajpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查 ...
- 老男孩Day13作业:ORM学员管理系统
一.作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上 ...
- 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作
spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ...
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- 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 数据库 ...
- UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?
选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用
Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...
随机推荐
- canvas学习笔记1
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- css实现等高布局 两栏自适应布局 三栏自适应布局
等高布局: HTML结构如下: <div class="wrapper"> <div class="box"> <h1>.. ...
- spring boot实战(第二篇)事件监听
http://blog.csdn.net/liaokailin/article/details/48186331 前言 spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利 ...
- ThinkPHP5入门(一)----框架篇
一.命名规范: 下划线法: 函数的命名 配置参数 常量(大写) 数据表和字段 驼峰法: 属性的命名 方法的命名 帕斯卡法: 类名 类文件名 类的命名
- 使用Apache HttpClient 4.5设置超时时间
使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为了防止访问其他http服务时,由于超时导致自己的应用受影响. 4.5版本中,这两个参数的设置都抽象到了 ...
- Luogu_4886 快递员
Luogu_4886 快递员 一道淀粉质的题目. 先考虑最简单的算法,那便是对每个点都求一边.时间复杂度O(NM) 然后如果我们把每个点的结果对应一个高度,我们会发现.最优解是在这个对应高度形成的三维 ...
- Gradle Goodness: Run a Build Script With a Different Name
Normally Gradle looks for a build script file with the name build.gradle in the current directory to ...
- android实现静默安装demo
1.须要RootTools.jar 2.运行脚本 public class InstallerActivity extends Activity { /** Called when the a ...
- 为什么我不再用 .NET 框架(网摘)
觉得好就拿过来收藏了,保留出处链接-凌风 2017年08月23日 14:51:32 hisense_大致若愚 阅读数:9355 .NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简 ...
- c#采用emit将DataTable转List
前面已经说了List转DataTable,也整理了代码. 现在转回来说说DataTable转List. 先举一个例子 public class Person { public int Age{get; ...