Model | 数据库操作 |
Form | 用户请求的验证 |
ModelForm | 数据库操作(部分)用户请求验证(部分) |
Model操作
数据表操作
- Code First(代码优先)
- 创建类 -> 自动生成表
- DB First(数据库有限)
- 创建表 -> 自动生成类
类
一对多操作
# 用户表
class User(models.Model):
name = models.CharField(max_length=10)
email = models.EmailField(max_length=32)
# 与用户类型表建立一对多关系
user_type = models.ForeignKey('UserType')
# 用户类型表
class UserType(mdoels.Model):
name = models.CharField(max_length=10)
应用场景:
建立多对多操作的两种方式
- django的ManyToManyField()
更适合admin添加表数据
- 自己创建第三张表以两个ForeignKey()建立多对多关系
更适合调用表数据
一对一(OneToOneField())表
应用场景:1.单表过大,2.适合admin选择一对一数据
字段
数字
字符串
user = models.CharField() # 普通字符
email = models.EmailField() # 带正则的字符串
时间
二进制
文件
fiel = models.FileField(upload_to='path') # 文件
#图像
w = models.IntegerField() # 宽度
h = models.IntegerField() # 高度
img = ImageField(upload_to='path', width_field='w', height_field='h') # 自动获取图片宽高
字段参数
"""指定生成数据库列信息"""
null 数据库中字段是否可以为空
db_column 数据库中字段的列名
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键
db_index 数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引
"""外键字段参数"""
to
to_fields
related_name
on_delete
limit_choices_to
"""admin显示信息"""
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default