Django模型字段类型
Django ORM 提供了丰富的模型字段类型,允许开发者精确地定义数据库表的结构。以下是所有主要的 Django ORM 模型字段及其用途:
基本字段类型
-
AutoField
自动递增的整数,通常用作主键。
-
BigAutoField
自动递增的大整数。
-
BigIntegerField
大整数字段。
-
BinaryField
二进制数据字段。
-
BooleanField
布尔值字段。
-
CharField
字符串字段,需要指定最大长度。
-
DateField
日期字段。
-
DateTimeField
日期和时间字段。
-
DecimalField
十进制浮点数字段,需指定最大位数和小数点位数。
-
DurationField
时间跨度字段。
-
EmailField
电子邮件地址字段。
-
FileField
文件上传字段。
-
FloatField
浮点数字段。
-
ImageField
图片上传字段,继承自
FileField
。 -
IntegerField
整数字段。
-
GenericIPAddressField
通用 IP 地址字段,可以是 IPv4 或 IPv6。
-
NullBooleanField
可以为空的布尔值字段(已弃用,使用
BooleanField
和NullBooleanField
)。 -
PositiveIntegerField
正整数字段。
-
PositiveSmallIntegerField
正小整数字段。
-
SlugField
用于保存短标签,通常用于 URL。
-
SmallIntegerField
小整数字段。
-
TextField
大文本字段。
-
TimeField
时间字段。
-
URLField
URL 字段。
-
UUIDField
UUID 字段,用于存储全局唯一标识符。
关系字段类型
-
ForeignKey
外键字段,用于定义多对一的关系。
-
ManyToManyField
多对多关系字段。
-
OneToOneField
一对一关系字段。
通用参数
这些参数适用于大多数字段类型:
null
: 如果为True
,Django 将在数据库中存储NULL
值,而不是空字符串。blank
: 如果为True
,该字段允许为空。choices
: 一个包含二元组的可迭代对象,用于选择字段的可选值。default
: 用于设置字段的默认值。primary_key
: 如果为True
,该字段将作为模型的主键。unique
: 如果为True
,该字段的值必须唯一。verbose_name
: 用于设置字段的可读名称。help_text
: 用于设置字段的帮助文本。
示例综合模型
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
birth_date = models.DateField()
class Category(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
STATUS_CHOICES = [
('available', 'Available'),
('checked_out', 'Checked Out'),
]
title = models.CharField(max_length=200)
publication_date = models.DateField()
price = models.DecimalField(max_digits=10, decimal_places=2)
in_stock = models.BooleanField(default=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
cover_image = models.ImageField(upload_to='book_covers/', null=True, blank=True)
slug = models.SlugField(unique=True)
description = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
rating = models.FloatField(default=0)
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='available')
总结
Django 提供了多种字段类型来满足不同的数据存储需求。了解和使用这些字段类型,可以帮助你精确地定义数据库表的结构,并充分利用 Django ORM 提供的功能来简化数据库操作。