如何获取Django模型中自动生成字段的列表?
Django模型自动生成字段的获取方法
Django没有提供公开的内置函数直接返回所有自动生成字段的列表(你提到的_get_auto_generated_fields()属于内部私有方法,不建议依赖),但可以通过模型的_meta属性结合字段的内置属性来筛选。
核心判断依据
每个模型字段都带有auto_created属性,Django用它标记该字段是否由框架自动生成,而非用户显式定义。
具体实现示例
- 获取所有自动生成字段(包含反向关联、多对多中间字段)
auto_generated_fields = [field for field in MyModel._meta.get_fields() if field.auto_created]
- 仅获取数据库中实际存在的具体自动生成字段(排除反向关联这类虚拟字段)
concrete_auto_fields = [ field for field in MyModel._meta.get_fields() if field.auto_created and field.concrete ]
补充说明
- 自动生成字段的典型场景:模型未显式指定主键时Django自动添加的
id字段(AutoField/BigAutoField)、多对多关系的中间表字段、外键的反向关联字段等。 - 不要使用
_meta._get_auto_generated_fields()这类私有方法,它们不属于公开API,Django版本迭代时可能被修改或移除,会导致代码兼容性问题。
内容的提问来源于stack exchange,提问作者CrazySynthax
相关产品推荐
相关产品推荐

