Django `models.Field` 所有常见配置参数的完整清单与说明表


🧩 一、让字段可以为空

在 Django 的 models.py 中,可以通过设置字段的两个参数来控制是否允许为空:

参数 作用范围 说明
null=True 数据库层面 数据库字段允许保存 NULL
blank=True 表单验证层面 表单提交时允许为空(不强制校验)

✅ 示例:允许字段为空

python 复制代码
class User(models.Model):
    nickname = models.CharField(max_length=50, null=True, blank=True)
  • null=True → 在数据库中该字段可以为 NULL
  • blank=True → 在 Django 表单(包括 admin)中该字段可以留空

📘 说明:

  • 字符串字段(CharField、TextField) 通常推荐:blank=True, null=False
    (即空字符串 "" 代替 NULL
  • 数字、日期等字段 一般用 null=True 表示无值。

⚙️ 二、Django Model 字段可配置项全集(通用参数)

每个 Django 字段(例如 CharField, IntegerField 等)都继承自 Field 基类,大多支持以下配置:

参数名 类型 默认值 说明
null bool False 数据库是否允许为 NULL
blank bool False 表单/验证是否允许为空
default any None 字段默认值
primary_key bool False 是否为主键(会自动加索引)
unique bool False 是否唯一
db_index bool False 是否建立数据库索引
db_column str None 指定数据库中的字段名
db_tablespace str None 指定索引表空间(较少用)
choices iterable None 下拉选择的固定值(用于表单)
verbose_name str None 字段的人类可读名称
help_text str "" 帮助提示信息(Admin 显示)
editable bool True 是否可在表单或 Admin 中编辑
error_messages dict None 自定义验证错误提示
validators list \[\] 自定义验证器函数列表
auto_created bool False 系统内部标识(通常不手动设)
unique_for_date str None 限制同一天内唯一(针对日期字段)
unique_for_month str None 限制同月内唯一
unique_for_year str None 限制同年内唯一

📘 三、特定字段的额外参数

1️⃣ CharField

参数 说明
max_length 字符串最大长度(必须)

2️⃣ TextField

无额外参数(适合大文本)

3️⃣ IntegerField / FloatField / DecimalField

参数 说明
max_digits 总位数(仅 DecimalField
decimal_places 小数位数(仅 DecimalField

4️⃣ DateTimeField / DateField

参数 说明
auto_now 每次保存对象时自动更新为当前时间
auto_now_add 仅在第一次创建时设置时间

5️⃣ BooleanField

参数 说明
默认不允许 NULL,如需三态逻辑用 NullBooleanField(Django 4.0 后用 BooleanField(null=True) 代替)

6️⃣ ForeignKey

参数 说明
to 关联的模型类
on_delete 删除级联方式(必填,如 models.CASCADE
related_name 反向引用名
related_query_name 反向查询前缀
limit_choices_to 限制可选关联对象
db_constraint 是否创建外键约束(默认 True)

7️⃣ ManyToManyField

参数 说明
to 关联模型
related_name 反向引用名
through 自定义中间表
through_fields 指定中间表关联字段
symmetrical 是否对称关系(默认 True)

8️⃣ FileField / ImageField

参数 说明
upload_to 上传文件的路径或函数
storage 自定义存储系统(如 S3)

🧠 四、实际开发推荐配置示例

python 复制代码
class Product(models.Model):
    name = models.CharField("产品名称", max_length=100, unique=True)
    description = models.TextField("描述", blank=True)
    price = models.DecimalField("价格", max_digits=10, decimal_places=2)
    stock = models.IntegerField("库存", default=0)
    category = models.ForeignKey(
        "Category",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="products"
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

📚 五、小结

想要的效果 设置方法
数据库可以为 NULL null=True
表单可以留空 blank=True
两者都允许 null=True, blank=True
仅表单可空,数据库为非空字符串 blank=True, null=False

相关推荐
JohnnyDeng941 小时前
【Android】Android 包体积优化:R8/ProGuard 深度配置全攻略
android·性能优化·kotlin·jetpack
故渊at1 小时前
第九板块:Android 多媒体体系 | 第二十四篇:Camera Service 与 HAL3 成像流水线
android·camera·多媒体体系·hal3
Jinkxs4 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
私人珍藏库5 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
Cloud_Shy6186 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
AFinalStone6 小时前
Android12 U盘插拔链路源码全解析(五):Framework层(下) StorageManagerService
android·frameworks
林九生8 小时前
【实用技巧】MySQL 绿色版一键路径更新脚本详解 —— update_path.bat 深度解析
android·数据库·mysql
故渊at9 小时前
第十三板块:Android 综合架构与未来演进 | 第三十一篇:Android 架构演进与 Fuchsia OS 的挑战
android·架构·宏内核·微内核·fuchsia·ipc 性能博弈
aqi009 小时前
一文速览 HarmonyOS 6.1.1 推出的十个新特性
android·华为·harmonyos·鸿蒙·harmony
matrixmind19 小时前
aiomysql:异步场景下的 MySQL 驱动
android·数据库·mysql·其他