Django 模型定义
模型定义用于定义表字段的类型,长度,是否必填,默认值等等,可理解为表结构定义。一般都是在models.py中定义,在myweb\web中编辑models.py如下:
from django.db import models
#任务表
class Tasks(models.Model):
task_name = models.CharField('任务名称', max_length=100)
task_user = models.CharField('操作者', max_length=20)
task_describe = models.TextField('任务描述', max_length=2000, default='')
task_start_date = models.DateField('开始日期', auto_now_add=True)
task_end_date = models.DateField('结束日期', auto_now_add=True)
task_result = models.TextField('任务评价', max_length=2000,default='')
class Meta:
verbose_name = '任务表'
verbose_name_plural = "任务表"
所有的模型定义都继承models.Model,所以先from django.db import models然后定义一个Tasks的模型并继承models,class Tasks(models.Model),给模型定义一些业务字段。
models.CharField('任务名称', max_length=100)中的'任务名称'是verbose_name,也可以这样写models.CharField(verbose_name='任务名称', max_length=100),这样写的好处是在后台将显示中文'任务名称',否则会显示task_name。
同样模型定义时,加入class Meta,即可在后台页面中显示中文:任务表,否则显示模型类名:Tasks。
字段的常见类型有:
类型 | 说明 |
AutoField | 一个自动增加的整数类型字段。如果没有定义,Django会自动添加字段:id = models.AutoField(primary_key=True),这是一个自增字段,从1开始计数。 |
BigAutoField | 64位整数类型自增字段,数字范围更大,从1到9223372036854775807 |
BigIntegerField | 64位整数字段,类似IntegerField,-9223372036854775808 到9223372036854775807。在Django的模板表单里体现为一个textinput标签。 |
BooleanField | 布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签。如果要接收null值,请使用NullBooleanField。 |
CharField | 字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。最常用的filed。 |
CommaSeparatedIntegerField | 逗号分隔的整数类型。必须接收一个max_length参数。常用于表示较大的金额数目,例如1,000,000元。 |
DateField | class DateField(auto_now=False, auto_now_add=False, **options)日期类型。一个Python中的datetime.date的实例。两个重要参数:(参数互斥,不能共存)auto_now:每当对象被保存时将字段设为当前日期,常用于保存最后修改时间。auto_now_add:每当对象被创建时,设为当前日期,常用于保存创建日期(注意,它是不可修改的)。设置上面两个参数就相当于给field添加了editable=False和blank=True属性。如果想具有修改属性,请用default参数。例子:pub_time = models.DateField(auto_now_add=True),自动添加发布时间。 |
DateTimeField | 日期时间类型。与DateField相比就是多了小时、分和秒的显示,其它功能、参数、用法、默认值等等都一样。 |
DecimalField | 固定精度的十进制小数。必须提供两个指定的参数!参数max_digits:最大的位数,必须大于或等于小数点位数 。decimal_places:小数点位数,精度。 例子:储存最大不超过999,带有2位小数位精度的数,定义如下:models.DecimalField(..., max_digits=5, decimal_places=2)。 |
EmailField | 邮箱类型,默认max_length最大长度254位。使用这个字段的好处是,可以使用DJango内置的EmailValidator进行邮箱地址合法性验证。 |
FileField | class FileField(upload_to=None, max_length=100, **options) |
FilePathField | 文件路径类型 |
FloatField | 浮点数类型 |
IntegerField | 整数类型,取值范围-2147483648到2147483647。 |
NullBooleanField | 类似布尔字段,只不过额外允许NULL作为选项之一。 |
PositiveSmallIntegerField | 较小的正整数字段,从0到32767。 |
SmallIntegerField | 小整数,包含-32768到32767。 |
TextField | 大量文本内容,在HTML中表现为Textarea标签,如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。只有CharField才能同时作用于两者。 |
TimeField | 时间字段,Python中datetime.time的实例。接收同DateField一样的参数,只作用于小时、分和秒。 |
表结构定义好后,要同步数据,意思是所有这些对模型的定义,改动,都真正的迁移到物理表(我的理解),运行命令如下:
python manage.py makemigrations
python manage.py migrate
执行完命令后,可以到数据库所在服务器查看一下,数据表是否创建了。
提示:以后所有对模型的改动,都要重新执行一次这两条命令。
该文章对你有帮助吗,求分享转发: 分享到QQ空间 分享给QQ好友