Django模型数据类型和字段列表
模型最重要的部分和唯一需要的部分是它定义的数据库字段列表。字段是由类属性指定的。注意不要选择与模型API(如清洁、保存或删除)相冲突的字段名。
示例:
from django.db import models
class Musician(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
instrument = models.CharField(max_length=200)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
设置一个字段来存储任何类型的数据,就像在C/C++中决定一个数据类型来存储一个特定的整数,char等。Django中的字段是用来存储特定类型数据的数据类型。例如,要存储一个整数,可以使用IntegerField。这些字段对特定的数据类型有内置的验证,也就是说你不能在IntegerField中存储 “abc”。同样,对于其他字段也是如此。这篇文章围绕着Django模型中可以使用的主要字段展开。
以下是在开始使用Django Fields之前应该注意的一些关键属性。
字段类型
模型中的每个字段都应该是适当的字段类的实例。Django使用字段类的类型来决定一些事情。
- 列的类型,它告诉数据库要存储什么样的数据(如INTEGER,VARCHAR,TEXT)。
- 渲染表单字段时要使用的默认HTML小部件(例如:
<input type="text">,<select></select>
)。 - 最小的验证要求,在Django的管理员和自动生成的表单中使用。
Django有几十种内置字段类型,可以用来保存任何类型的数据,从数字到整个HTML文件。下面是Django中使用的所有字段类型的列表。
基本模型数据类型和字段列表
字段名称 | 描述 |
---|---|
AutoField | 它是一个自动递增的IntegerField。 |
BigAutoField | 它是一个64位的整数,和AutoField很像,只是它能保证适合从1到9223372036854775807的数字。 |
BigIntegerField | 它是一个64位的整数,和IntegerField很像,只是它能保证适合从-9223372036854775808到9223372036854775807的数字。 |
BinaryField | 一个用于存储原始二进制数据的字段。 |
BooleanField | 一个真/假字段。这个字段的默认窗体部件是一个CheckboxInput。 |
CharField | 一个用于存储文本值的字段。 |
DateField | 一个日期,在Python中用一个datetime.date实例表示。 |
DateTimeField | 它用于日期和时间,在Python中用一个datetime.datetime实例表示。 |
DecimalField | 它是一个固定精度的十进制数,在Python中用一个Decimal实例表示。 |
DurationField | 一个用于存储时间段的字段。 |
EmailField | 这是一个CharField,用于检查值是否为有效的电子邮件地址。 |
FileField | 这是一个文件上传字段。 |
FloatField | 它是一个浮点数,在Python中由一个float实例表示。 |
ImageField | 它继承了FileField的所有属性和方法,但也验证了上传对象是有效的图像。 |
IntegerField | 它是一个整数字段。从-2147483648到2147483647的值在Django支持的所有数据库中都是安全的。 |
GenericIPAddressField | 一个IPv4或IPv6地址,字符串格式(如192.0.2.30或2a02:42fe::4)。 |
NullBooleanField | 类似于BooleanField,但允许NULL作为选项之一。 |
PositiveIntegerField | 和IntegerField一样,但必须是正数或零(0)。 |
PositiveSmallIntegerField | 类似于PositiveIntegerField,但只允许在某个(与数据库有关的)点下取值。 |
SlugField | Slug是一个报纸术语。蛞蝓是某种事物的简短标签,只包含字母、数字、下划线或连字符。它们通常用于URLs中。 |
SmallIntegerField | 它就像IntegerField,但只允许在某个(与数据库有关的)点以下的值。 |
TextField | 一个大的文本字段。这个字段的默认窗体部件是一个文本区域。 |
TimeField | 一个时间,在Python中用一个datetime.time实例表示。 |
URLField | 一个URL的CharField,由URLValidator验证。 |
UUIDField | 一个用于存储通用唯一标识符的字段。使用 Python 的 UUID 类。当在PostgreSQL上使用时,它以uuid数据类型存储,否则以char(32)存储。 |
关系字段
Django还定义了一组代表关系的字段。
字段名称 | 描述 |
---|---|
ForeignKey | 一个多对一的关系。需要两个位置参数:模型所涉及的类和on_delete选项。 |
ManyToManyField | 一个多对多的关系。需要一个位置参数:模型与之相关的类,其作用与对ForeignKey的作用完全相同,包括递归和懒惰关系。 |
OneToOneField | 一个一对一的关系。从概念上讲,这类似于unique=True的ForeignKey,但关系的 “反面 “将直接返回单个对象。 |