Part1:了解主键

1.      Python和Django版本如下:

E:\django>python3 -V

Python 3.5.2

E:\django>python3 -m django --version

2.0rc1

2.      创建项目learndjango和应用testdjangofield

E:\django>django-admin startproject learndjango

E:\django>cd learndjango

E:\django\learndjango>python3 manage.py startapp testdjangofield

3.      编辑项目应用learndjango下settings.py配置文件

添加应用testdjangofield、修改语言和时区

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'testdjangofield',

]

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

4.      编辑应用testdjangofield下的models.py文件

添加三个数据模型,主键定义方式不同

表1虽然没有明确定义主键,但是django会默认定义一个主键id

from django.db import models

class Table001(models.Model):

myCharField = models.CharField(max_length=32)

class Table002(models.Model):

myId = models.AutoField(primary_key=True)

myCharField = models.CharField(max_length=32)

class Table003(models.Model):

myId = models.BigAutoField(primary_key=True)

myCharField = models.CharField(max_length=32)

5.      编辑应用testdjangofield下的admin.py文件

注册三个数据模型到admin

from django.contrib import admin

from testdjangofield.models import Table001,Table002,Table003

admin.site.register(Table001)

admin.site.register(Table002)

admin.site.register(Table003)

6.      在testdjangofield\migrations目录下创建数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

7.      创建数据库超级用户/密码:admin/Django12

E:\django\learndjango>python3 manage.py createsuperuser

Username (leave blank to use 'bing'): admin

Email address: admin@admin.com

Password:Django12

Password (again): Django12

Superuser created successfully.

8.      启动项目

E:\django\learndjango>python3 manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

December 21, 2017 - 14:22:59

Django version 2.0rc1, using settings 'learndjango.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

9.      访问后台管理页面

打开浏览器访问http://127.0.0.1:8000/admin/

输入超级用户账号/密码,进入管理页面后为Table00*s各添加几条记录

10.    使用工具SQLite Expert Personal打开sqlite数据库文件

数据库文件位置:learndjango\ db.sqlite3

可以查看并编辑三个表的记录

Part2:了解布尔类型

11.    修改models.py文件,添加第4个数据模型,了解布尔类型字段

class Table004(models.Model):

#布尔类型

myBooleanField1 = models.BooleanField(verbose_name='Admin中字段的显示名称')#默认checkbox格式

myBooleanField2 = models.BooleanField(u'Admin中字段的显示名称')#默认checkbox格式

myBooleanField3 = models.BooleanField(default=True, db_column='字段列名')#默认勾选chockbox

myNullBooleanField1 = models.NullBooleanField()#允许为null的布尔类型

myNullBooleanField2 = models.NullBooleanField(default=True)#下拉框选择是或者否

12.    修改admin.py,注册第4个数据模型到admin

admin.site.register(Table004)

13.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

14.    启动项目并访问table004后台管理编辑页面

Part3:了解字符和文本类型

15.    修改models.py文件,添加第5个数据模型,了解字符类型和文本类型字段

class Table005(models.Model):

MY_CHOICES1 = (

('F','女'),

('M','男'),

)

#字符或文本类型

myCharField1 = models.CharField(max_length=32, default='这里是默认值')

myCharField2 = models.CharField(max_length=32, editable=False, default='admin下不能编辑')

myCharField3 = models.CharField(max_length=32, blank=False, null=False)

myCharField4 = models.CharField(max_length=10, choices=MY_CHOICES1)

myCharField5 = models.CharField(max_length=1000, help_text='Admin中该字段的提示信息')

myTextField = models.TextField(default='请输入文本')

16.    修改admin.py,注册第5个数据模型到admin

admin.site.register(Table005)

17.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

18.    启动项目并访问table005后台管理编辑页面

editable=False的属性前台没有显示

Part4:了解日期类型

19.    修改models.py文件,添加第6个数据模型,了解日期和时间类型字段

class Table006(models.Model):

#日期或时间类型

myDateField1 = models.DateField()

myDateField2 = models.DateField(u'创建日期', auto_now_add=True)

myDateField3 = models.DateField(u'修改日期', auto_now=True)

myDateTimeField1 = models.DateTimeField()

myDateTimeField2 = models.DateTimeField(auto_now_add=True)

myDateTimeField3 = models.DateTimeField(auto_now=True)

myTimeField = models.TimeField()

20.    修改admin.py,注册第6个数据模型到admin

admin.site.register(Table006)

21.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

22.    启动项目并访问table006后台管理编辑页面

auto_now_add=True和auto_now=True的属性前台没有显示

Part5:了解数值类型

23.    修改models.py文件,添加第7个数据模型,了解数值类型字段

class Table007(models.Model):

#数值类型

myFloatField = models.FloatField()

myIntegerField = models.IntegerField(choices=[(0, '张三'),(1, '王二麻子'),],default=1)#(-2147483648, 2147483647)

myPositiveIntegerField = models.PositiveIntegerField()#(0, 2147483647)

myBigIntegerField = models.BigIntegerField()#(-9223372036854775808, 9223372036854775807)

mySmallIntegerField = models.SmallIntegerField()#(-32768, 32767)

myPositiveSmallIntegerField = models.PositiveSmallIntegerField()#(0, 32767)

myDecimalField = models.DecimalField(max_digits=5, decimal_places=2)

24.    修改admin.py,注册第7个数据模型到admin

admin.site.register(Table007)

25.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

26.    启动项目并访问table007后台管理编辑页面

Part6:了解特殊格式的字符/文本类型

27.    修改models.py文件,添加第8个数据模型,了解特殊格式的类型字段

class Table008(models.Model):

#特殊格式的CharField/TextField

myGenericIPAddressField = models.GenericIPAddressField(protocol='both')#IP地址,protocol可以是:both、ipv4、ipv6

myEmailField = models.EmailField(unique=True, max_length=254)#电子邮箱

myURLField = models.URLField()#地址正则表达式

mySlugField = models.SlugField()#连接符、下划线、字母、数字

28.    修改admin.py,注册第8个数据模型到admin

admin.site.register(Table008)

29.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

30.    启动项目并访问table008后台管理编辑页面

Part7:了解文件上传

31.    修改models.py文件,添加第9个数据模型,了解文件上传

class Table009(models.Model):

#文件上传

myFileField = models.FileField(upload_to = './%Y/%m/%d/')

32.    修改admin.py,注册第9个数据模型到admin

admin.site.register(Table009)

33.    修改settings.py文件,配置文件上传目录

STATIC_URL = '/static/'

STATICFILES_DIRS = (

os.path.join(BASE_DIR, "static"),

)

# 上传文件目录

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/upload/')

MEDIA_URL = '/static/upload/'

34.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

35.    启动项目并访问table009后台管理编辑页面

选择文件上传,保存可以查看上传的文件

文件地址是:http://127.0.0.1:8000/static/upload/2017/12/26/mt.jpg

后台存储数据如下:

Part8:了解图片上传

36.    修改models.py文件,添加第10个数据模型,了解图片上传

class Table010(models.Model):
    #图片上传
    myImageField = models.ImageField(upload_to = './image/%Y/%m/%d/')

37.    修改admin.py,注册第10个数据模型到admin

admin.site.register(Table010)

38.    安装图像处理库Pillow

E:\django\learndjango>pip --default-timeout=6000 install pillow

39.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

40.    启动项目并访问table010后台管理编辑页面

如果上传的不是图片,则提示错误

选择图片上传,保存可以查看上传的图片

图片路径:http://127.0.0.1:8000/static/upload/image/2017/12/27/P1.png

Part9:了解FilePathField

41.    修改models.py文件,添加第11个数据模型,了解FilePathField

from django.conf import settings

class Table011(models.Model):
    #服务器文件引用
    myFilePathField1 = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY)#默认不包含子目录
    myFilePathField2 = models.FilePathField(path=settings.FILE_PATH_FIELD_DIRECTORY, recursive=True)#包含子目录

42.    修改admin.py,注册第11个数据模型到admin

admin.site.register(Table011)

43.    修改settings.py文件,添加配置

# 服务器文件目录
FILE_PATH_FIELD_DIRECTORY = 'C:\\Users\\bing\\Desktop\\temp'

44.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

45.    启动项目并访问table011后台管理编辑页面

控件可以直接访问服务器某个指定目录下的文件,不清楚这个控件有什么用

Part10:了解表之间的关系

46.    修改models.py文件,添加3个数据模型

class TableBoy(models.Model):

boyName = models.CharField(u'男人姓名', max_length=32, blank=False, null=False)

boyAge = models.PositiveSmallIntegerField(u'年龄')

boyHeight = models.DecimalField(u'身高CM', max_digits=4, decimal_places=1)

boyWeight = models.DecimalField(u'体重KG', max_digits=4, decimal_places=1)

boyEmail = models.EmailField(unique=True, max_length=254)

class TableGirl(models.Model):

girlName = models.CharField(u'女人姓名', max_length=32, blank=False, null=False)

girlAge = models.PositiveSmallIntegerField(u'年龄')

girlHeight = models.DecimalField(u'身高CM', max_digits=4, decimal_places=1)

girlWeight = models.DecimalField(u'体重KG', max_digits=4, decimal_places=1)

girlEmail = models.EmailField(unique=True, max_length=254)

lover = models.ManyToManyField(TableBoy)#恋爱关系,多对多

marry = models.OneToOneField(TableBoy, on_delete=models.CASCADE, related_name='husband')#婚姻关系,一对一

class TableBaby(models.Model):

babyName = models.CharField(u'婴儿姓名', max_length=32, blank=False, null=False)

mommy = models.ForeignKey(TableGirl, on_delete=models.CASCADE)#母女关系,一对多

47.    修改admin.py,注册3个数据模型到admin

admin.site.register(TableBoy)

admin.site.register(TableGirl)

admin.site.register(TableBaby)

48.    更新数据迁移文件并执行

E:\django\learndjango>python3 manage.py makemigrations

E:\django\learndjango>python3 manage.py migrate

49.    查看后台数据库表

TableBoy

TableGirl,marry_id体现的是1对1的关系

婚姻关系中男女关系是唯一的,不允许重婚

1对1的关系相当于外键+唯一索引

TableBaby,mommy_id体现的是1对多(或者多对1)关系

1个妈妈可以有多个孩子

TableGirl_lover,tablegirl_id和tableboy_id体现的是多对多关系

1个男孩可以和多个女孩儿交往,1个女孩可以和多个男孩儿交往

50.    补充几个概念

主键:主键一般采用无意义的数字或字符,能唯一地标识表中的每一行记录

外键:外键用于建立表之间的关系,例如员工表、工资表

索引:索引可以提高索引字段的查询速度,减少分组和排序时间

唯一索引:唯一索引可以保证数据记录的唯一性

主键只能有一个,索引可以有多个

表之间的关系有三种:一对一、一对多(多对一)、多对多

=====END=====

初步了解 Django Models的更多相关文章

  1. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  2. Django models Form model_form 关系及区别

    Django models Form model_form

  3. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  4. django models数据类型

    Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...

  5. django models 类型整理 version:1.8.3

    django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...

  6. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  7. Django models中关于blank与null的补充说明

    Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...

  8. Django Models的数据类型汇总

    https://blog.csdn.net/devil_2009/article/details/41735611 Django Models的数据类型 汇总 AutoField IntegerFie ...

  9. Django - models.py 应用

    Django - models.py 应用 编写 models.py 文件 from django.db import models # Create your models here. class ...

随机推荐

  1. 非常棒的教程记录(JVM)

    这里暂且记录下看过的非常棒的博客吧! JVM 指令集简单解释,来自一个不认识的网友的个人博客:http://www.iloveandroid.net/2015/12/06/jvm%E6%8C%87%E ...

  2. SALM入门笔记(1):特征点的匹配

    SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...

  3. NS3网络仿真(10): 解析以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 解析以太网帧的过程是构建以太网帧的逆过程,当我们接收到一个以太网帧时,仍然以上一节中的ARP帧为例 ...

  4. configure:cannot guess build type; you must specify one

    换了msys2后.编译xerces-c-2.8.0../runConfigure -pmingw-msys -cgcc -xg++ -s -P/opt/xercesc-2.8.0 后遇到如标题所看到的 ...

  5. 【 全干货 】5 分钟带你看懂 Docker !

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...

  6. Elasticsearch聚合——aggregation

    聚合提供了分组并统计数据的能力.理解聚合的最简单的方式是将其粗略地等同为SQL的GROUP BY和SQL聚合函数.在Elasticsearch中,你可以在一个响应中同时返回命中的数据和聚合结果.你可以 ...

  7. 自学Python2.6-深浅拷贝

    Python 深浅拷贝 一.深浅拷贝- 数字.字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1=123 n2=n1 # # ...

  8. SGD

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  10. 第五章 使用 SqlSession

    第五章 使用 SqlSession 原文链接; http://www.mybatis.org/spring/zh/sqlsession.html 在 MyBatis 中,你可以使用 SqlSessio ...