1. CharField
- 解释: 用于存储短文本,如用户名、标题等。
- 参数:
max_length
: 必需参数,指定最大长度。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。choices
: 选项列表,限制字段的值必须在选项中。
- 示例:
class UserProfile(models.Model): username = models.CharField(max_length=150, unique=True) status = models.CharField(max_length=20, choices=[('active', 'Active'), ('inactive', 'Inactive')], default='active')
- 解释:
username
: 用户名,最大长度为 150 个字符,必须唯一。status
: 用户状态,最大长度为 20 个字符,值必须是 ‘active’ 或 ‘inactive’,默认值为 ‘active’。
2. TextField
- 解释: 用于存储长文本,如文章内容、评论等。
- 参数:
null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class BlogPost(models.Model): title = models.CharField(max_length=200) content = models.TextField()
- 解释:
title
: 文章标题,最大长度为 200 个字符。content
: 文章内容,没有长度限制。
3. IntegerField
- 解释: 用于存储整数,如年龄、数量等。
- 参数:
null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class Product(models.Model): name = models.CharField(max_length=100) stock = models.IntegerField(default=0)
- 解释:
name
: 产品名称,最大长度为 100 个字符。stock
: 库存数量,默认为 0。
4. BooleanField
- 解释: 用于存储布尔值,如是否激活、是否管理员等。
- 参数:
default
: 字段的默认值。
- 示例:
class User(models.Model): email = models.EmailField(unique=True) is_active = models.BooleanField(default=True)
- 解释:
email
: 用户的电子邮件地址,必须唯一。is_active
: 用户是否激活,默认为True
。
5. DateField
- 解释: 用于存储日期,如生日、发布日期等。
- 参数:
null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。auto_now
: 每次保存对象时,自动将字段设置为当前日期。auto_now_add
: 在对象第一次创建时,自动将字段设置为当前日期。
- 示例:
class Event(models.Model): name = models.CharField(max_length=200) event_date = models.DateField()
- 解释:
name
: 事件名称,最大长度为 200 个字符。event_date
: 事件日期。
6. DateTimeField
- 示例:
class Comment(models.Model): content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
- 解释:
content
: 评论内容。created_at
: 评论创建时间,自动设置为对象创建时的当前时间。updated_at
: 评论更新时间,每次保存对象时自动更新为当前时间。
7. EmailField
- 解释: 用于存储电子邮件地址。
- 参数:
max_length
: 最大长度,默认值为 254。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class Contact(models.Model): name = models.CharField(max_length=100) email = models.EmailField()
- 解释:
name
: 联系人名称,最大长度为 100 个字符。email
: 联系人的电子邮件地址。
8. FloatField
- 解释: 用于存储浮点数,如价格、评分等。
- 参数:
null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class Product(models.Model): name = models.CharField(max_length=100) price = models.FloatField()
- 解释:
name
: 产品名称,最大长度为 100 个字符。price
: 产品价格。
9. DecimalField
- 解释: 用于存储定点数,如精确的货币值。
- 参数:
max_digits
: 数字的最大位数,包括小数点前后的位数。decimal_places
: 小数点后的位数。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class Product(models.Model): name = models.CharField(max_length=100) price = models.DecimalField(max_digits=10, decimal_places=2)
- 解释:
name
: 产品名称,最大长度为 100 个字符。price
: 产品价格,最多 10 位数字,其中 2 位小数。
10. URLField
- 解释: 用于存储 URL 地址。
- 参数:
max_length
: 最大长度,默认值为 200。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值。
- 示例:
class Website(models.Model): name = models.CharField(max_length=100) url = models.URLField()
- 解释:
name
: 网站名称,最大长度为 100 个字符。url
: 网站的 URL 地址。
11. ForeignKey
- 解释: 用于创建多对一的关系。
- 参数:
to
: 关联的模型。on_delete
: 指定删除关联对象时的行为。related_name
: 反向关系的名称。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。
- 示例:
class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
- 解释:
title
: 书名,最大长度为 200 个字符。author
: 书的作者,关联到Author
12. OneToOneField
- 解释: 用于创建一对一的关系。
- 参数:
to
: 关联的模型。on_delete
: 指定删除关联对象时的行为。related_name
: 反向关系的名称。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。
- 示例:
class User(models.Model): username = models.CharField(max_length=150, unique=True) class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') bio = models.TextField(blank=True)
- 解释:
user
: 关联到User
模型,删除用户时也删除关联的用户资料。bio
: 用户简介,可以为空。
13. ManyToManyField
- 解释: 用于创建多对多的关系。
- 参数:
to
: 关联的模型。related_name
: 反向关系的名称。blank
: 是否允许表单提交空值,默认为False
。
- 示例:
class Student(models.Model): name = models.CharField(max_length=100) class Course(models.Model): title = models.CharField(max_length=200) students = models.ManyToManyField(Student, related_name='courses')
- 解释:
title
: 课程标题,最大长度为 200 个字符。students
: 选修该课程的学生,关联到Student
模型。
14. FileField
- 解释: 用于存储文件。
- 参数:
upload_to
: 文件上传的目录或处理函数。max_length
: 文件路径的最大长度,默认值为 100。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。
- 示例:
class Document(models.Model): title = models.CharField(max_length=200) file = models.FileField(upload_to='documents/')
- 解释:
title
: 文件标题,最大长度为 200 个字符。file
: 上传的文件,存储在documents/
目录下。
15. ImageField
- 解释: 用于存储图像文件。
- 参数:
upload_to
: 文件上传的目录或处理函数。max_length
: 文件路径的最大长度,默认值为 100。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。
- 示例:
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
- 解释:
user
: 关联到User
模型。avatar
: 用户头像,存储在avatars/
目录下,可以为空。
16. SlugField
- 解释: 用于存储短标签,通常用于 URL。
- 参数:
max_length
: 最大长度,默认值为 50。null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。unique
: 是否唯一,默认为False
。
- 示例:
class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(unique=True)
- 解释:
title
: 文章标题,最大长度为 200 个字符。slug
: 文章的短标签,必须唯一。
17. JSONField
- 解释: 用于存储 JSON 格式的数据。
- 参数:
null
: 是否允许数据库存储 NULL 值,默认为False
。blank
: 是否允许表单提交空值,默认为False
。default
: 字段的默认值,可以是一个可调用对象,如dict
。encoder
: 自定义 JSON 编码器。decoder
: 自定义 JSON 解码器。
- 示例:
from django.db import models class Product(models.Model): name = models.CharField(max_length=100) attributes = models.JSONField(default=dict) # 使用示例 product = Product.objects.create(name="Laptop", attributes={"color": "silver", "weight": "1.5kg"})
- 解释:
name
: 产品名称,最大长度为 100 个字符。attributes
: 产品属性,存储为 JSON 格式,默认值为空字典。