django models字段类型和参数的选择

1. CharField

  • 解释: 用于存储短文本,如用户名、标题等。

  • 参数 :

    • max_length: 必需参数,指定最大长度。
    • null: 是否允许数据库存储 NULL 值,默认为 False。
    • blank: 是否允许表单提交空值,默认为 False。
    • default: 字段的默认值。
    • choices: 选项列表,限制字段的值必须在选项中。
  • 示例 :

    python 复制代码
    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: 字段的默认值。
  • 示例 :

    python 复制代码
    class BlogPost(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
  • 解释 :

    • title: 文章标题,最大长度为 200 个字符。
    • content: 文章内容,没有长度限制。

3. IntegerField

  • 解释: 用于存储整数,如年龄、数量等。

  • 参数 :

    • null: 是否允许数据库存储 NULL 值,默认为 False。
    • blank: 是否允许表单提交空值,默认为 False。
    • default: 字段的默认值。
  • 示例 :

    python 复制代码
    class Product(models.Model):
        name = models.CharField(max_length=100)
        stock = models.IntegerField(default=0)
  • 解释 :

    • name: 产品名称,最大长度为 100 个字符。
    • stock: 库存数量,默认为 0。

4. BooleanField

  • 解释: 用于存储布尔值,如是否激活、是否管理员等。

  • 参数 :

    • default: 字段的默认值。
  • 示例 :

    python 复制代码
    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: 在对象第一次创建时,自动将字段设置为当前日期。
  • 示例 :

    python 复制代码
    class Event(models.Model):
        name = models.CharField(max_length=200)
        event_date = models.DateField()
  • 解释 :

    • name: 事件名称,最大长度为 200 个字符。
    • event_date: 事件日期。

6. DateTimeField

  • 示例 :

    python 复制代码
    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: 字段的默认值。
  • 示例 :

    python 复制代码
    class Contact(models.Model):
        name = models.CharField(max_length=100)
        email = models.EmailField()
  • 解释 :

    • name: 联系人名称,最大长度为 100 个字符。
    • email: 联系人的电子邮件地址。

8. FloatField

  • 解释: 用于存储浮点数,如价格、评分等。

  • 参数 :

    • null: 是否允许数据库存储 NULL 值,默认为 False。
    • blank: 是否允许表单提交空值,默认为 False。
    • default: 字段的默认值。
  • 示例 :

    python 复制代码
    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: 字段的默认值。
  • 示例 :

    python 复制代码
    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: 字段的默认值。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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。
  • 示例 :

    python 复制代码
    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 解码器。
  • 示例 :

    python 复制代码
    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 格式,默认值为空字典。
相关推荐
wno7045 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数7 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室7 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen7 小时前
mysql数据库基本操作
数据库·mysql
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe8 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新8 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball10 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
xiaogai_gai10 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
注塑机数据采集联网10 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析