Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Python-100-Days
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
huangkq
Python-100-Days
Commits
1fe049a1
Commit
1fe049a1
authored
May 24, 2018
by
jackfrued
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新了第2天的文档
parent
064af212
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
33 deletions
+40
-33
Django 2.x实战(02) - 深入模型.md
Day31-Day35/Django 2.x实战(02) - 深入模型.md
+40
-33
No files found.
Day31-Day35/Django 2.x实战(02) - 深入模型.md
View file @
1fe049a1
...
@@ -111,7 +111,6 @@
...
@@ -111,7 +111,6 @@
location = models.CharField(max_length=10, db_column='dloc', verbose_name='部门所在地')
location = models.CharField(max_length=10, db_column='dloc', verbose_name='部门所在地')
class Meta:
class Meta:
db_table = 'tb_dept'
db_table = 'tb_dept'
...
@@ -121,17 +120,17 @@
...
@@ -121,17 +120,17 @@
no = models.IntegerField(primary_key=True, db_column='eno', verbose_name='员工编号')
no = models.IntegerField(primary_key=True, db_column='eno', verbose_name='员工编号')
name = models.CharField(max_length=20, db_column='ename', verbose_name='员工姓名')
name = models.CharField(max_length=20, db_column='ename', verbose_name='员工姓名')
job = models.CharField(max_length=10, verbose_name='职位')
job = models.CharField(max_length=10, verbose_name='职位')
mgr = models.
IntegerField(
null=True, blank=True, verbose_name='主管编号')
mgr = models.
ForeignKey('self', on_delete=models.SET_NULL,
null=True, blank=True, verbose_name='主管编号')
sal = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='月薪')
sal = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='月薪')
comm = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, verbose_name='补贴')
comm = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, verbose_name='补贴')
dept = models.ForeignKey(Dept, on_delete=models.PROTECT, verbose_name='所在部门')
dept = models.ForeignKey(Dept,
db_column='dno',
on_delete=models.PROTECT, verbose_name='所在部门')
class Meta:
class Meta:
db_table = 'tb_emp'
db_table = 'tb_emp'
```
```
> 说明:
如果不能理解定义模型类使用的字段类及其属性的含义,可以参考文末字段类、字段属性、元数据选项的说明
。
> 说明:
上面定义模型时使用了字段类及其属性,其中IntegerField对应数据库中的integer类型,CharField对应数据库的varchar类型,DecimalField对应数据库的decimal类型,ForeignKey用来建立多对一外键关联。字段属性primary_key用于设置主键,max_length用来设置字段的最大长度,db_column用来设置数据库中与字段对应的列,verbose_name则设置了Django后台管理系统中该字段显示的名称。如果对这些东西感到很困惑也不要紧,文末提供了字段类、字段属性、元数据选项等设置的相关说明,不清楚的读者可以稍后查看对应的参考指南
。
5.
通过模型创建数据表。
5.
通过模型创建数据表。
...
@@ -155,23 +154,31 @@
...
@@ -155,23 +154,31 @@
### 在后台管理模型
### 在后台管理模型
1.
创建超级管理员账号。
2.
登录后台管理系统。
3.
注册模型类。
4.
对模型进行CRUD操作。
5.
注册模型管理类。
### 使用ORM完成模型的CRUD操作
### 使用ORM完成模型的CRUD操作
#### 新增
#### 新增
#### 删除
#### 删除
#### 更新
#### 更新
#### 查询
#### 查询
最后,我们通过上面掌握的知识来实现部门展示以及根据部门获取部门对应员工信息的功能。
最后,我们通过上面掌握的知识来实现部门展示以及根据部门获取部门对应员工信息的功能,效果如下图所示,对应的代码可以访问
<https://github.com/jackfrued/Python-100-Days/tree/master/Day31-Day35/oa>
。
### Django模型最佳实践
### Django模型最佳实践
...
@@ -203,31 +210,31 @@
...
@@ -203,31 +210,31 @@
Django模型字段类
Django模型字段类
| 字段类 |
默认小组件 |
说明 |
| 字段类 | 说明 |
| --------------------- | ------------------
| ------------------
------------------------------------------ |
| --------------------- | ------------------------------------------------------------ |
| AutoField |
无 |
自增ID字段 |
| AutoField |自增ID字段 |
| BigIntegerField |
NumberInput |
64位有符号整数 |
| BigIntegerField |64位有符号整数 |
| BinaryField |
无 |
存储二进制数据的字段,对应Python的bytes类型 |
| BinaryField | 存储二进制数据的字段,对应Python的bytes类型 |
| BooleanField |
CheckboxInput |
存储True或False |
| BooleanField | 存储True或False |
| CharField |
TextInput |
长度较小的字符串 |
| CharField | 长度较小的字符串 |
| DateField |
DateInput |
存储日期,有auto_now和auto_now_add属性 |
| DateField | 存储日期,有auto_now和auto_now_add属性 |
| DateTimeField |
DateTimeInput |
存储日期和日期,两个附加属性同上 |
| DateTimeField | 存储日期和日期,两个附加属性同上 |
| DecimalField |
TextInput |
存储固定精度小数,有max_digits(有效位数)和decimal_places(小数点后面)两个必要的参数 |
| DecimalField |存储固定精度小数,有max_digits(有效位数)和decimal_places(小数点后面)两个必要的参数 |
| DurationField |
TextInput |
存储时间跨度 |
| DurationField |存储时间跨度 |
| EmailField |
TextInput |
与CharField相同,可以用EmailValidator验证 |
| EmailField | 与CharField相同,可以用EmailValidator验证 |
| FileField |
ClearableFileInput |
文件上传字段 |
| FileField | 文件上传字段 |
| FloatField |
TextInput |
存储浮点数 |
| FloatField | 存储浮点数 |
| ImageField |
ClearableFileInput |
其他同FileFiled,要验证上传的是不是有效图像 |
| ImageField | 其他同FileFiled,要验证上传的是不是有效图像 |
| IntegerField |
NumberInput |
存储32位有符号整数。 |
| IntegerField | 存储32位有符号整数。 |
| GenericIPAddressField |
TextInput |
存储IPv4或IPv6地址 |
| GenericIPAddressField | 存储IPv4或IPv6地址 |
| NullBooleanField |
NullBooleanSelect |
存储True、False或null值 |
| NullBooleanField | 存储True、False或null值 |
| PositiveIntegerField |
NumberInput |
存储无符号整数(只能存储正数) |
| PositiveIntegerField | 存储无符号整数(只能存储正数) |
| SlugField |
TextInput |
存储slug(简短标注) |
| SlugField | 存储slug(简短标注) |
| SmallIntegerField |
NumberInput |
存储16位有符号整数 |
| SmallIntegerField | 存储16位有符号整数 |
| TextField |
Textarea |
存储数据量较大的文本 |
| TextField | 存储数据量较大的文本 |
| TimeField |
TextInput |
存储时间 |
| TimeField | 存储时间 |
| URLField |
URLInput |
存储URL的CharField |
| URLField | 存储URL的CharField |
| UUIDField |
TextInput |
存储全局唯一标识符 |
| UUIDField | 存储全局唯一标识符 |
#### 字段属性
#### 字段属性
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment