django ORM数据库中的字段类型
时间: 2025-06-18 07:13:09 浏览: 7
### Django ORM 中支持的数据库字段类型及其用法
Django 提供了一组丰富的字段类型用于定义模型类中的属性,这些字段会映射到数据库中的相应列。以下是常见的字段类型以及它们的作用:
#### 基本字符型字段
- **`CharField`**: 表示固定长度字符串,默认对应 MySQL 的 `VARCHAR` 类型。
```python
name = models.CharField(max_length=100, null=False, blank=False)
```
参数说明:
- `max_length`: 字符串的最大长度,必填项[^2]。
- **`TextField`**: 表示大文本字段,通常用于存储较长的文章或描述。
```python
description = models.TextField(null=True, blank=True)
```
#### 数字型字段
- **`IntegerField`**: 整数类型,适用于普通的整数值。
```python
age = models.IntegerField(default=0)
```
- **`BigIntegerField`**: 大整数类型,适合存储较大的整数值。
```python
population = models.BigIntegerField()
```
- **`FloatField`**: 浮点数类型,用于存储带有小数部分的数据。
```python
price = models.FloatField()
```
- **`DecimalField`**: 高精度浮点数类型,常用于货币计算场景。
```python
amount = models.DecimalField(max_digits=8, decimal_places=2)
```
参数说明:
- `max_digits`: 总位数(包括小数点前后的所有数字)。
- `decimal_places`: 小数点后保留的小数位数。
#### 时间日期型字段
- **`DateField`**: 存储日期值。
```python
birth_date = models.DateField(auto_now_add=True)
```
- **`DateTimeField`**: 存储时间戳值,包含日期和时间。
```python
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
```
参数说明:
- `auto_now_add`: 创建记录时自动填充当前时间。
- `auto_now`: 更新记录时自动更新为当前时间。
#### 布尔型字段
- **`BooleanField`**: 存储布尔值(True/False),默认值可以设为 False 或 True。
```python
is_active = models.BooleanField(default=True)
```
#### 文件上传相关字段
- **`FileField`**: 用于文件上传功能。
```python
file_upload = models.FileField(upload_to='uploads/')
```
- **`ImageField`**: 继承自 FileField,专门处理图片文件。
```python
avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
```
#### 关系型字段
- **`ForeignKey`**: 定义外键关系,表示一对一或多对一的关系。
```python
department = models.ForeignKey('Department', on_delete=models.CASCADE)
```
参数说明:
- `on_delete`: 当关联对象被删除时的行为选项,常见有 `CASCADE`, `PROTECT`, 和 `SET_NULL` 等[^4]。
- **`ManyToManyField`**: 定义多对多关系。
```python
tags = models.ManyToManyField('Tag')
```
- **`OneToOneField`**: 定义一对一关系。
```python
profile = models.OneToOneField('Profile', on_delete=models.CASCADE)
```
#### 特殊用途字段
- **`SlugField`**: 用于生成 URL 友好的唯一标识。
```python
slug = models.SlugField(unique=True)
```
- **`EmailField`**: 专用于验证电子邮件地址。
```python
email = models.EmailField(unique=True)
```
---
### 示例代码展示
以下是一个完整的模型定义案例,综合展示了上述字段的应用方式:
```python
from django.db import models
class Author(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __str__(self):
return f"{self.first_name} {self.last_name}"
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publication_date = models.DateField()
summary = models.TextField(blank=True, null=True)
isbn = models.CharField(max_length=13, unique=True)
def __str__(self):
return self.title
```
---
阅读全文
相关推荐
















