django中字段类型
字段类型 | 说明 | 备注 |
---|---|---|
AutoField | 自增字段 | 如果不显示指定主键,django每次都会自动新建一个自增字段(并设置为主键) |
BigAutoField | 类似AutoField | 存储数字为只能为 1到9223372036854775807 |
BigIntegerField | 类似IntegerField | -9223372036854775808 到 9223372036854775807 |
BinaryField | 存储二元数据 | |
BooleanField | 布尔型字段 | 存储 true 或者false。 |
CharField | 字符串字段 | 存大文本可以使用. TextField字段。且必须要设置max_length属性。 |
DateField | 日期字段 | Auto_now属性表示只有在每次调用.save() 方法日期字段才会更新 |
Auto_now_add属性在首次创建的时候存储那一刻日期,不会再改。 | ||
DateTimeField | 日期时间字段 | 与DateField属性特性类似,有Auto_now和Auto_now_add属性 |
DecimalField | 固定精度的十进制数 | 必须属性 max_digits = 整数,(存储数的最大位数。连小数位数也算进去了,且必须要大于decimal_places) |
必须属性 Decimal_places = 整数,(保留几位小数) | ||
DurationField | 存储时间段 | 待研究。。。 |
EmailField | 邮箱字段 | 可以通过EmailValidator验证邮箱格式 |
PositiveIntegerField | 大于0的整数字段 | 0 到 2147483647 |
TimeField | 时间字段 | 与DateField字段接受相同的属性 |
FileField | 文件上传字段 | 下文仔细介绍 |
IntegerField | 整型字段 | -2147483648 到 2147483647 |
GenericIPAddressField | ip地址字段 | 待详细研究 |
FileField
FileField
(upload_to=None, max_length=100, **options)文件上传字段(upload_to为必须属性。)
注意:当你上传文件时,mysql数据库中存放的并不是文件内容,而是文件地址。实际文件被存放到你指定的文件目录中。
因此需要你设置上传的目录。
在setttings.py文件中设置 MEDIA_ROOT = /media/(也可以是你指定的其他目录)。
例如:
class UserInfo(models.Model): user = models.CharField(max_length = 20,unique = True) avator = models.FileField(upload_to = 'docm')
那么你上传文件将会存放在/media/docm/ 目录下。如果你的文件名字是doing.jpg 。那么表中avator字段值为docm/doing.jpg,这个地址指向文件对象,不是绝对路径。
实际应用时,应该将不同用户上传内容,存放在不同文件夹下,以防文件名混淆重复。存放目录应该类似 /media/用户1/doing.jpg。动态定义上传路径需要赋予upload_to属性一个可调用对象(常为函数),该函数接受两个参数,instance和filename。
例如:
from django.db import models from django.contrib.auth.models import User import uuid import os # Create your models here. def user_directory_path(instance, filename): ext = filename.split('.')[-1] #获取文件后缀属性名 filename = '{}.{}'.format(uuid.uuid4().hex[:8], ext) #生成永不重复的新文件名 return os.path.join(instance.user.id, "avatar", filename) #返回动态路径 class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) avatar = models.ImageField(upload_to=user_directory_path)