Field options:所有字段均可用,可选
- null 默认为False, True表示允许该字段为空
- blank 默认为False, True表示允许为空
- blank 与 null 区别:null是跟数据库相关的, blank是跟表单验证相关的。当blank=True,表示允许输入一个空值
- choice 可选择的, 限制该选项的字段值必须是已经指定的choice中的一个
- db_column 数据库column的名称, 不填则默认使用Field名作为字段名
- db_index Ture表示数据库会为该字段创建索引
- default 给个默认值
- editable 默认为True False表示该字段不会出现在admin或者其他ModelForm, 同时不进行模型验证
- primary_key True表示设置主键
- unique True表示唯一性, 不可重复
Field type:字段类型
- class AutoField(**options)
没有自己设置主键时, Django默认自动设置
- class IntegerField(**options)
默认的表单组件是一个NumberInput
- class PositiveIntegerField(**options)
类似于IntegerField, 但是必须为正或0
- class BigIntegerField(**options)
默认的表单组件是一个TextInput
- class FloatField(**options)
默认的表单组件是一个NumberInput
- class BooleanField(**options)
默认的表单组件是一个CheckboxInput
- class NullBooleanField(**options)
类似于BooleanField, 不同的是其允许值为null
- class CharField(max_length=None, **options)
默认的表单组件是一个TextInput
max_length //必填参数
- class URLField(max_length=200, **options)
默认的表单组件是一个TextInput, 类似于CharField
- class TextField(**options)
默认的表单组件是一个Textarea
- class DateField(auto_now=False, auto_now_add=False, **options)
datetime.date的实例, 默认的表单组件是一个TextInput
auto_now //可选参数, True表示每次更新的时间
auto_now_add //可选参数, True表示第一次创建的时间
- class DateTimeField(auto_now=False, auto_now_add=False, **options)
datetime.datetime的实例, 类似DateField, 其他同上,
- class TimeField(auto_now=False, auto_now_add=False, **options)
datetime.time的实例, 类似DateField, 默认的表单组件是一个TextInput
- class DecimalField(max_digits=None, decimal_places=None, **options)
Decimal的实例, 默认的表单组件是一个TextInput
max_digits //必填参数, 最大位数(包含小数部分)
decimal_places //必填参数, 小数位
- class FileField(upload_to=None, max_length=100, **options)
默认的表单组件是一个ClearableFileInput
upload_to //可选参数
max_length //可选参数
upload_to:
1. 如果使用默认的FileSystomStorage, 文件将会存储到settings文件中配置的MEDIA_ROOT路径中
2.upload_to的值也可以为可调用对象,通过调用这个对象可以获得上传路径, 此可调用必须接受两个参数:
instance:定义了FileField的模型实例
filename:文件名
eg1.
class MyModel(models.Model):
# file will be uploaded to MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
eg2.
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
- class FilePathField(path=None, match=None, recursive=False, max_length=100, **options)
该字段仅限于文件系统上某个目录中的文件名集合中
path //必填参数, 上面所说的'某个目录'的绝对路径
match //可选参数, 正则表达式
recursive //默认False, 是否递归该目录下所有子目录的所有文件
- class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
继承FileField所有属性和方法
- class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options) 默认的表单组件是一个TextInput
protocol='both/ipv4/ipv6' //默认为both
unpack_ipv4 //默认禁用
- class EmailField(max_length=254, **options)
- class SlugField(max_length=50, **options)
- class UUIDField(**options)
用于存储通用唯一标识符的字段, 可以用该字段代替默认的AutoField
eg
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields