Models
一个模型通常用来确定数据的唯一性和来源信息,它包含要存储的数据的基本字段和行为。通常,每个模型映射到一个数据库表。
- 每个模型都是一个Python类,该类集成了django.db.models.Model
- 模型的每个属性表示一个字段
简单的表模型
from django.db import models
class ScarpPort(models.Model):
# primary_key=True 表示为主键
# AutoField 表示为自增字段
id = models.AutoField(primary_key=True)
# max_length 表示为该字段最大长度
# CharField表示为字段类型为varchar
nick_name = models.CharField(max_length=64)
station_name = models.CharField(max_length=64)
scarp_car_type = models.CharField(max_length=64)
floor_spot_name = models.CharField(max_length=64)
drive_order_model = models.CharField(max_length=64)
# IntegerField 表示为该字段类型为int
status = models.IntegerField()
class Meta:
# 设置表名为scarp_port
db_table = 'scarp_port'
迁移数据库
makemigrations
该命令会在每个app目录下创建migrations目录,并在该目录下生成数据库迁移文件(可以在该文件中看到详细的SQL语句)。
migrate
执行迁移,使用该命令会读取settings文件中的INSTALL_APPS中的app 和 数据库配置。
将app中的models文件迁移到数据库中生成数据库和表。
Field选项
verbose_name 和 help_text
id = models.AutoField(primary_key=True)
sn = models.CharField(max_length=64, verbose_name='订单号')
scarp_port = models.CharField(max_length=64, verbose_name='废料口', help_text='该任务由哪个废料口创建')
type = models.IntegerField(choices=TYPE, verbose_name='类型')
status = models.IntegerField(choices=STATUS, default=0, verbose_name='状态')
create_time = models.DateTimeField(verbose_name='创建时间')
start_time = models.DateTimeField(verbose_name='开始时间', null=True)
end_time = models.DateTimeField(verbose_name='完成时间', null=True)
相当于别名,在django admin中字段标题将显示为verbose_name,help_text 将显示为帮助文档
choices
class TransportOrder(models.Model):
TYPE = (
(0, 'EMPTY'),
(1, 'FULL')
)
STATUS = (
(0, 'DISPATCHABLE'),
(1, 'BEING_PROCESSED'),
(2, 'FINISHED'),
(3, 'FAILED')
)
id = models.AutoField(primary_key=True)
sn = models.CharField(max_length=64)
scarp_port = models.CharField(max_length=64)
# choices 设置为上面的TYPE元组
type = models.IntegerField(choices=TYPE)
# choices 设置为上面的STATUS元组
status = models.IntegerField(choices=STATUS, default=1)
create_time = models.DateTimeField()
start_time = models.DateTimeField()
end_time = models.DateTimeField()
class Meta:
db_table = 'transport_order'
由二元元组组成的选项条件,如果使用了choices 在默认的表单中将会是一个选择框,而不是标准的文本框,并且将选择限制在元组中。
get_FOO_display()
元组的第一个元素将会存储在数据库中,第二个元素可以通过_display()显示,例如:
>>> t = TransportOrder(sn='123', type=0)
>>> t.save()
>>> t.type
1
>>> t.get_type_display()
'EMPTY'
class Meta
ording
设置排序规则
...
...
end_time = models.DateTimeField(verbose_name='结束时间', null=True)
class Meta:
ordering = ['create_time', 'order']
效果:
db_table
保存到数据库中的表名
verbose_name
别称
verbose_name_plural
别称复数