01.定义模型举例
- 模型类被定义在"应用/models.py"文件中。
- 模型类必须继承自Model类,位于包django.db.models中。
from django.db import models
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name='名称')
bpub_date = models.DateField(verbose_name='发布日期')
bread = models.IntegerField(default=0, verbose_name='阅读量')
bcomment = models.IntegerField(default=0, verbose_name='评论量')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class Meta:
db_table = 'tb_books'
verbose_name = '图书'
verbose_name_plural = verbose_name
def __str__(self):
"""定义每个数据对象的显示信息"""
return self.btitle
class HeroInfo(models.Model):
GENDER_CHOICES = (
(0, 'female'),
(1, 'male')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class Meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name
def __str__(self):
return self.hname
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
class Meta:
db_table = "table_name"
verbose_name='user'
verbose_name_plural='user'
unique_together = (("name", "password"),)
index_together = [
("name", "password"),
]
03.字段
3.1 常用字段
from django.db import models
class UserGroup(models.Model):
uid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32,null=True, blank=True)
email = models.EmailField(max_length=32)
text = models.TextField()
ctime = models.DateTimeField(auto_now_add=True)
uptime = models.DateTimeField(auto_now=True)
ip1 = models.IPAddressField()
ip2 = models.GenericIPAddressField()
active = models.BooleanField(default=True)
data01 = models.DateTimeField()
data02 = models.DateField()
data03 = models.TimeField()
age = models.PositiveIntegerField()
balance = models.SmallIntegerField()
money = models.PositiveIntegerField()
bignum = models.BigIntegerField()
user_type_choices = (
(1, "超级用户"),
(2, "普通用户"),
(3, "普普通用户"),
)
user_type_id = models.IntegerField(choices=user_type_choices, default=1)
3.2 不常用字段
URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
FloatField(Field)
- 浮点型
DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度
BinaryField(Field)
- 二进制类型
04.参数
| 选项 |
说明 |
| null |
如果为True,表示允许为空,默认值是False |
| blank |
如果为True,则该字段允许为空白,默认值是False |
| db_column |
字段的名称,如果未指定,则使用属性的名称 |
| db_index |
若值为True, 则在表中会为此字段创建索引,默认值是False |
| default |
默认 |
| primary_key |
若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 |
| unique |
如果为True, 这个字段在表中必须有唯一值,默认值是False |
| related_name |
在关联查询中,代替单一对象查找多对象 对象名小写_set(book.heroinfo_set.all() 的写法 |
| auto_now_add |
只在数据添加的时候,记录时间 |
| auto_now |
数据添加和更新的时候,记录时间 |