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. 将日志 ...
随机推荐
- int vs Integer
在项目开发过程中,有时候在选择int还是Integer会有些纠结.今天就来聊一下这个问题.当然,下面所说的基本也适用于java中其他基本类型和其包装类型. Definitions: int是原始类型, ...
- 超慢速移动动画使用CSS3实现流畅效果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGVpZm9yZXZlcg==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- [CQOI2017]小Q的表格
题目 神仙题,神仙题 这是一道很适合盯着发呆的题目 看到这个规律 \[ f(a,b)=f(b,a) \] \[ b\times f(a,a+b)=(a+b)\times f(a,b) \] 这也没什么 ...
- size和len
size函数只能用于计算array,不能用于计算list,返回的是数组的元素个数 len函数既可以计算array,也可以计算list >>> a = np.array([1,2]) ...
- LeetCode刷题(数据库)---- 交换工资
题:给定一个工资表,如下所示,m=男性 和 f=女性 .交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然).要求使用一个更新查询,并且没有中间临时表. 例如: | id | nam ...
- linux文件系统写过程简析
linux写入磁盘过程经历VFS -> 页缓存(page cache) -> 具体的文件系统(ext2/3/4.XFS.ReiserFS等) -> Block IO ->设备 ...
- ios - 沙盒和NSBundle
沙盒 1.沙盒机制介绍 iOS中的沙盒机制是一种安全体系.每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.应用必须待在自己的沙盒里,其他应用不能 ...
- node多图或者单图上传
<form id="form" enctype="multipart/form-data"> <input type="text&q ...
- Archlinux+gnome安装中文输入法
环境:archlinux+gnome 1.首先需要配置Archlinuxcn源 打开/etc/pacman.conf,添加 [archlinuxcn] Server = https://mirrors ...
- echarts中跨域动态获取数据时,当某些对应的数据为空时,鼠标滑动到所在位置卡死
才疏学浅,万望指点. formatter: function (params) { var rel = params[0].name + "<br />"; rel + ...