Django抽象模型命名规范咨询:字段式命名vs通用命名?
Django抽象模型命名规范解析
官方与行业通用规范
Django官方并未强制抽象模型的命名格式,但核心原则是:类名应反映抽象模型的职责或功能集合,而非机械罗列字段。
行业主流实践包括:
- 用
Base、Abstract这类前缀明确标识抽象类,避免与普通模型混淆 - 名称聚焦于抽象类的核心定位,比如你的
BaseContentProperties,清晰传达了它是为内容类模型提供基础属性的抽象类
两种命名方式的对比
字段罗列式命名(如IsPublishedAndCreatedAt)
- 弊端:字段增多后名称会极度冗长,可读性骤降;一旦字段调整(新增/删除),类名必须同步修改,维护成本极高
- 仅适用场景:仅含1-2个极特定字段、职责单一到可直接用字段定义的极简抽象类(这类场景极少)
职责描述式命名(如BaseContentProperties)
- 优势:名称简洁稳定,能快速传递抽象类的作用;后续字段调整无需修改类名,符合面向对象"封装变化"的设计原则
- 适用场景:绝大多数为多个模型提供通用属性/方法的抽象模型,也是Django官方示例(如
AbstractBaseUser、PermissionsMixin)采用的命名风格
你的实现符合最佳实践
当前代码的命名方式是完全合理的,示例如下:
class BaseContentProperties(models.Model): is_published = models.BooleanField() created_at = models.DateTimeField() class Meta: abstract = True class Category(BaseContentProperties): # 自定义字段 pass class Location(BaseContentProperties): # 自定义字段 pass class Post(BaseContentProperties): # 自定义字段 pass
团队协作建议
若团队负责人坚持字段罗列命名,可从以下角度沟通:
- 参考Django官方内置抽象类的命名(如
AbstractBaseUser、PermissionsMixin),均未采用字段罗列方式 - 说明字段增减时的维护成本,以及冗长名称对代码可读性的负面影响
- 建议统一采用"前缀+职责描述"的规则,兼顾清晰性与可维护性
内容的提问来源于stack exchange,提问作者user25510847
相关产品推荐
相关产品推荐

