Django学习日记03_模型_Fields
创建模型
模型对应工程中的应用,一个工程可能包含很多的应用,通过命令
python manage.py startapp myapp
创建一个叫myapp的应用,django会帮助生成以下目录:
polls/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py
其中,models.py 中就是实现模型设计的地方。
python通过模型的搭建避免直接操作数据库,而通过配置数据库环境,在不改变模型的情况下对数据库进行切换也没有问题,不仅方便数据库升级或者改变,也方便管理数据模型。
根据djangodocument的指引,编辑models.py创建一个Person的模型:
class Person(models.Model):
first_name = models.CharFeild(max_length=30)
last_name = models.CharFeild(max_length=30)
以上就创建了一个Person模型,对应到数据库,可以看成是创建了一个表单,包含first name和last name两个字段以及django自动创建的主键:id。如果想要指定主键而不是自动创建的id作为主键的话,需要在CharFeild对象初始化时添加属性:primary_key = True 。
Fields
Fields是模型最重要的一部分,是数据的主体。和数据库相对应的,Field也有很多的类型,用得比较多的如上例的CharField创建字符型字段,BigIntegerField可以创建64位最大整形的字段,TextFeild可以创建大字符串字段,BinaryField可以创建字节型字段,BooleanFeild可以创建布尔型字段,还有一些表示功能的EmailField、DateField、TimeField、DateTimeField、IPAddressField等等。
除了指定Field类型外,还需要通过一定的属性来加以约束。如设置blank属性为True则允许字段为空,否则不允许;通过设置default属性可以指定一个默认值,该默认值会在所有的模型实例中都会被引用,所以绝对不能是一个可变对象(字典、列表、集合等),否则所有的实例都引用同一个对象,可想而知改变都是同步的,如果需要用到可变对象的话,应该将其包装成可执行的对象,如下例中,JSON字段将一个字典作为默认值:
def contact_feild_default():
return {'email':'abc@example.com'}
contact_info = models.JSONField("ContactInfo",default=contact_feild_default)
通过指定choices属性,可以将该字段变为可选值,可选值必须是可迭代的:
PROVINCE_CHOICES = (
(‘ZJ’,'Zhejiang'),
(‘FJ','Fujian'),
(‘BJ','Beijing'),
(‘SH','Shanghai'),
)
address = models.CharFeild(max_length = 3 ,choices = PROVINCE_CHOICES,default='ZJ')
其中,元组中的第一个元素表示在数据库中实际使用的内容,第二个元素是便于使用者理解的名字。
可选常量都要写在类定义中,一来可以便于管理命名空间,第二可以方便调用一些常量。在django1.7中,新添加了分组的可选模式
MEDIA_CHOICES = (
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
)
分组模式中可以包含未分组的元组,前两个分组中,Audio、Video表示组别,组别内的元组第一个元素是实际使用的值,第二个元素是便于使用者理解的名字。
django支持的都是关系型数据库,可以在Field中指定关系模型。如ForeignKey指定外键:
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...
class Manufacturer(models.Model):
# ...
pass
在ForeignKey中使用一个字符串来表示要使用的外键的模型名,django会解析该字符串,并找到响应的模型。如果该模型不在同一个app中,使用 ForeignKey(‘appname.ModelName’)同样可以完成解析。
可以指定外键的属性来加以约束,如related_name,related_query_name,to_field,on_delete,等等,不太明白怎么用,看来以后要恶补一下数据库的知识了。
通过外键可以实现比较复杂的多对多的数据模型
Django学习日记03_模型_Fields的更多相关文章
- Django 学习笔记之模型高级用法
目录 1 复杂的字段类型 1.1 整数类型的区别 1.2 自增类型的区别 1.3 时间类型 1.4 FilePathField 1.5 FileField 1.6 ImageField 2 关系字段 ...
- Django学习日记07_Admin
django.contrib django.contrib是django中附带的一个工具集,由很多的附加组件组成.这些附加组件包括管理工具(django.contrib.admin).用户鉴别系统(d ...
- Django学习日记02_项目环境
创建一个工程: django-admin.py startproject mySite 将会产生以下文件: mySite/ manage.py mySite/ __init_ ...
- django 学习-6 定义模型--数据库的使用
1.service mysqld start 首先数据库是可用的 2.rpm -qa |grep MySQL-python 这个包是存在的 3.vim settings 修改databases 加 ...
- Django学习日记06_视图_URLconf、View
URLconf Django通过URLconf来响应网页请求,在项目设置settings.py中,设定了ROOT_URLCONF值来指定默认的URLconf(即mysite.urls),当HTTPRe ...
- Django学习日记05_模板_模板语言
Variables 在模板中,使用两个大括号包含变量的方式来使用变量: {{ name }} 该变量应该作为键值对中的键,在Context中能被查找到. Tags 模板中使用Tags来进行简单的逻辑: ...
- Django学习日记04_模板_overview
通过Django中的模板,使得设计人员和网站管理有一个对接的接口,实现网页设计和逻辑的分离,因此,模板会处理大量的文本解析内容,django中内部使用了高效的引擎来完成模板解析. 模板设置 在使用模板 ...
- Django学习日记01_环境搭建
1. 使用Vagrant 创建ubuntu虚拟机: 首先安装vagrant,网上有比较多的方法,如:http://www.th7.cn/system/mac/201405/55421.shtml 我使 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
随机推荐
- PHP实现excel
导入 public function excel_put(){ //先做一个文件上传,保存文件 $path=$_FILES['file']; $filePath = "uploads/&qu ...
- WinForm程序,实现只启动一个实例
前言:在我们做的软件中,当点击图标运行时,正常的需求是只需要启动一个软件的实例,这是非常重要的一点,不然就显得我们的软件非常的山寨,笔者在工作中经常遇到同事没有注意这一点,看是不重要,实则非常的重要, ...
- webpack安装配置
webpack安装 1.安装之前你必须要安装node.js,如果你没安装可以在node.js网去下载node.js 2.全局安装webpack,打开cmd输入npm install webpack - ...
- NNSZ OIers' Blog Archive
HWL:ssttkkl ,已经搬家到这个地址 NINGLONG:NINGLONG 愤鸟先飞: FNXF Syhien:13355936 ,已经搬家到这个地址 IDE:ThetaS TFW:TFX‘s ...
- 【NOIP2012提高组】借教室
90分暴力解法: 用线段树,初始值为该天的教室数,每个人来申请的时候在这段区间减去借走的数,然后查询最小值是否小于0,是就输出-1,否则继续. (其实在vijos是可以直接A的,他们的评测机太快了) ...
- keystone V3 与Microsoft Active Directory(AD)的集成
一 环境准备 1. 安装或在现有的windows server2008,操作Microsoft Acitve Directory(下面简称AD).欲了解AD请看系列文章[深入浅出ActiveDire ...
- 開始:触摸MySQL
学习MySQL.少不了安装一个MySQL数据库,安装想必非常easy,事实上也是.我下载了一个MySQL5.7.百度了一下安装步骤,就成功安装了.相对于Oracle来说要简单不少. 买了两本书,看了& ...
- CI环境配置
CI:php的MVC框架M(模型model):与数据库打交道的,一般情况下数据库里面的一张表对应一个Model,在里面对应该表的增删改查的操作V(视图view):用户看到的界面,其中很多数据是从数据库 ...
- cookies和re
参考:http://cuiqingcai.com/968.html http://cuiqingcai.com/977.html
- 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)
注意:以下都是在MySQL目录下的my.ini文件中改写(技术文). 一.InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoDB的索引块,而且也用来缓存Inn ...