一、创建数据模型。

实例:

作者模型:一个作者有姓名。

作者详情模型:把作者的详情放到详情表,包含性别、email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField)

出版商模型:出版商有名称,地址,所在城市,省,国家,网址。

书籍模型:书籍有书名,出版日期,价格。一本书可能会有多个作者,一个作者也可以写多本书,所以作者与书籍的关系是多对多的关联关系(many-to-many),一本书只应该由一个出版商出版,所以出版商和书籍是一对多的关联关系(one-to-many),也被称作外键[ForeignKey]。

 #coding=utf-8
from django.db import models
from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatible
class Author(models.Model):
name=models.CharField(max_length=30) def __str__(self):
return self.name class AuthorDetail(models.Model):
sex=models.BooleanField(max_length=1,choices=((0,'男'),(1,'女'),))
email=models.EmailField()
address=models.CharField(max_length=50)
birthday=models.DateField()
author=models.OneToOneField(Author) @python_2_unicode_compatible
class Publisher(models.Model):
name=models.CharField(max_length=30)
address=models.CharField(max_length=50)
city=models.CharField(max_length=60)
state_province=models.CharField(max_length=30)
country=models.CharField(max_length=50)
website=models.URLField() def __str__(self):
return self.name @python_2_unicode_compatible
class Book(models.Model):
title=models.CharField(max_length=100)
authors=models.ManyToManyField(Author)
publisher=models.ForeignKey(Publisher)
publication_date=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2,default=10) def __str__(self):
return self.title

一起来看看上面的代码:

1、每个数据模型都是 django.db.models.Model 的子类。它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。

2、每个模型相当于单个数据库表(这条规则的例外情况是多对多关系,多对多关系的时候会多生成一张关系表),每个属性也是这个表中的一个字段。属性名就是字段名,它的类型(例如CharField)相当于数据库的字段类型(例如varchar)。

3、模型之间的三种关系:一对一(OneToOneField),一对多(ForeignKey)和多对多(ManyToManyField)

4、模型的常用字段类型

BooleanField: 布尔类型字段

CharField: 字符串类型字段

DateField: 日期字段

DateTimeField:日期时间字段

DecimalField:(精确)小数字段

EmailField:Email字段

FileField:文件字段

FloatField:(浮点数)小数字段

ImageField:图片字段

IntegerField:整数字段

IPAddressField:IP字段

SmallIntegerField:小整数字段

TextField:文本字段

URLField:网址地址字段

...

5、模型常用的字段选项

null(null=True|False) : 数据库字段的设置是否可以为空(数据库进行验证)

blank(blank=True|False):字段是否为空django会进行校验(表单进行验证)

choices 轻量级的配置字段可选属性的定义

default 字段的默认值

help_text 字段文字帮助

primary_key (=True|False) 一般情况不需要进行定义是否为主键,没有显示指明主键,django会自动增加一个默认主键:id=models.AutoField(primary_key=True)

unique 是否唯一,对于数据库表而言。

verbose_name 字段的详细名称,如果不指定该属性,默认使用字段的属性名称。

...

更多详见:https://docs.djangoproject.com/en/1.10/ref/models/fields/

二、定义数据模型的扩展属性

通过内部类Meta给数据模型类增加扩展属性:

class Meta:

verbose_name='名称'

verbose_name_plural='名称复数形式'

ordering=['排序字段']

更多详见:https://docs.djangoproject.com/en/1.10/ref/models/options/

三、定义模型的方法

定义模型方法和普通python类方法没有太大差别,定义模型方法可以将当前对应的数据,组装成具体的业务逻辑。

示例:定义__unicode__() 让对象有个默认的名字

注意:python2里面用__unicode__(),python3里面用__str__()

def __str__(self):

return self.name


***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***

最新文章

  1. 搭建Apache Web服务器
  2. cookie和Session
  3. bzoj2716: [Violet 3]天使玩偶
  4. eclipse 常用快捷键及调试方法
  5. 【原】iOS学习之XMPP环境搭建
  6. groovyConsole — the Groovy Swing console
  7. java mail实现Email的发送,完整代码
  8. windows系统-web渗透工具-AWVS
  9. Node.js连接Mysql
  10. 【转】Unity3D NGUI事件 UIEvents
  11. SQL中ISNULL的使用
  12. package。。
  13. 走进STM32世界之Hex程序烧写
  14. 结合提供者模式解析Jenkins源码国际化的实现
  15. JGUI源码:Accordion鼠标中键滚动和手机端滑动实现(2)
  16. setInterval中this
  17. java map集合 --遍历
  18. 拦截器的作用之session认证登录和资源拦截
  19. RGB颜色空间、HSV颜色空间的理解
  20. 移动端开发时默认样式reset

热门文章

  1. 实践中需要了解的cpu特性
  2. SQL竖表转换成横表统计
  3. Dom4j总结
  4. Pig、Hive、MapReduce 解决分组 Top K 问题(转)
  5. 玩玩nmap
  6. Django CSRF cookie not set.错误
  7. linux网络基础设置 以及 软件安装
  8. Python:笔记(4)——高级特性
  9. linq中将int类型转换为string类型,toString()报错
  10. CodeForces - 786B Legacy (线段树+DIjkstra+思维)