Django学习(四):使用models

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 将显示为帮助文档


image
image
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']

效果:


image
db_table

保存到数据库中的表名

verbose_name

别称

verbose_name_plural

别称复数

你可能感兴趣的:(Django学习(四):使用models)