初步了解 Django Models
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的更多相关文章
- Django models 操作高级补充
Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra
- Django models Form model_form 关系及区别
Django models Form model_form
- Django models .all .values .values_list 几种数据查询结果的对比
Django models .all .values .values_list 几种数据查询结果的对比
- django models数据类型
Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...
- django models 类型整理 version:1.8.3
django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...
- django models的点查询/跨表查询/双下划线查询
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...
- Django models中关于blank与null的补充说明
Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...
- Django Models的数据类型汇总
https://blog.csdn.net/devil_2009/article/details/41735611 Django Models的数据类型 汇总 AutoField IntegerFie ...
- Django - models.py 应用
Django - models.py 应用 编写 models.py 文件 from django.db import models # Create your models here. class ...
随机推荐
- idea从git上拉取并管理项目
1:idea从git上拉取项目 (1)FILE --> New --> Project from Version Control --> Git (2):输入项目的Https SSH ...
- calc() ---一个会计算的css属性
最近这个月一直在赶项目开发,遇到的问题和学到的前端知识没有更新到博客园,现在闲了下来,就整理一下前端知识. 在项目开发中,在样式这方面花费的时间较多,因为针对于数字的变化特别多,本人不爱记数字,在看设 ...
- Android Weekly Notes Issue #287
Android Weekly Issue #287 December 10th, 2017 Android Weekly Issue #287 圣诞节快要来了,小编也偷懒了,本期内容包括如何通过AS添 ...
- 【技能大赛笔记01】Zigbee点对点按键控制程序开发
[技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...
- xxx金融后台管理系统详细版:包括本地开发调试详细步骤
效果演示地址, github地址: demo演示: 1.About 此项目是 vue2.0 + element-ui + node+mongodb 构建的后台管理系统,所有的数据都是从 ...
- Intent启动系统组件(activity,service,BroadReceiver)-android学习之旅(四十九)
android提供了统一的编程模型Intent来启动系统的组件,这样提供了松耦合性.是一种mvc的编程模式 $(function () { $('pre.prettyprint code').each ...
- 【剑指offer】扑克牌的顺子
个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ."红心A,黑桃3,小王,大王,方片 ...
- 经典面试题目——250M内存处理10G大小的log文件
前言 周末逛知乎的时候,看到的一个经典面试题目:http://www.zhihu.com/question/26435483.非常经典的一道分而治之的题目. 题目描写叙述例如以下: 有次面试遇到一个问 ...
- 教女朋友学Python运行环境搭建
下班比较早,吃了饭没什么事,就和女朋友一起研究了Python. 编程语言有很多,为什么选择它呢?因为它火吧,没什么好解释的,下面开始第一步,环境搭建.网上的教程实在太多,各种系统的各种版本,本地链接下 ...
- 《跟我学IDEA》四、配置模板(提高代码编写效率)
上一篇博文,我们学习了idea的一些实用配置,相信大家也对idea这个开发工具有了一个大概的了解.今天我们来学习模板的配置,idea提供很多模板从而提高编写代码的效率,比如说一些经常用的代码及生成文件 ...