Django模型实例(instance)的完整属性和方法说明

以下是Django模型实例(instance)的完整属性和方法说明,综合了核心功能和常用操作:
一、核心属性
_meta
提供模型元数据访问接口,常用子属性包括:
model_name:获取模型名称小写形式
model_name = MyModel._meta.model_nameapp_label:获取所属应用名称
app_name = MyModel._meta.app_labelfields:获取所有字段对象列表
fields_list = MyModel._meta.fields # 返回包含所有字段的列表
for field in fields_list:
print(field.name, field.get_internal_type()) # 输出字段名和类型_state
跟踪实例状态,包含:
adding:是否为新创建实例
用于判断实例是否为首次创建(未保存到数据库):
new_obj = MyModel(name='test')
print(new_obj._state.adding) # 输出True(未保存)
saved_obj = MyModel.objects.create(name='test')
print(saved_obj._state.adding) # 输出False(已保存)
db:当前使用的数据库别名
指定实例操作的目标数据库别名(多数据库场景):
# 显式指定数据库
obj = MyModel(name='multi_db')
obj.save(using='replica_db') # 保存到备用数据库
print(obj._state.db) # 输出'replica_db'
典型应用场景
新建检测:在save()前检查_state.adding实现差异化逻辑5
多库路由:通过_state.db追踪实例所属数据库,避免跨库操作错误7
该属性由Django内部管理,通常无需手动修改
pk
主键的快捷访问方式,等价于instance.id
二、字段操作方法
get_FOO_display()
获取choices字段的可读值(将FOO替换为字段名)
gender_display = instance.get_gender_display()
clean_fields(exclude=None)
验证字段值,排除指定字段5
full_clean()
执行完整模型验证(包含clean_fields和clean()方法)
三、数据库操作
save(force_insert=False, force_update=False, using=None)
保存实例到数据库,参数控制插入/更新行为
delete(using=None)
删除数据库记录
refresh_from_db(using=None, fields=None)
从数据库重新加载数据,可指定字段
四、关系查询
FOO_set
反向查询关联对象(一对多/多对多关系)
book.author_set.all() # 查询书籍的所有作者get_next_by_FOO(**kwargs)
按日期字段获取下一个实例
get_previous_by_FOO(**kwargs)
按日期字段获取上一个实例
五、自定义扩展
@property装饰器
创建计算属性
@property
def full_name(self):
return f"{self.first_name} {self.last_name}"
自定义业务方法
实现特定业务逻辑
def check_availability(self):
return self.stock > 0
六、特殊方法
__str__()
定义实例的字符串表示(用于admin等界面)
__eq__()
比较实例是否指向同一数据库记录
get_deferred_fields()
获取延迟加载的字段列表
完整功能建议参考Django官方文档的Model instance reference部分1。实际开发中,_meta和关系查询方法使用频率最高,其次是自定义业务方法。
更多文章:
使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结
2026年3月1日 09:10
django.utils中都有哪些功能?django.utils工具都详情的举例说明
2025年11月27日 22:32
Django 的基于类的视图总结,Django CBV类的详细使用方法整理
2025年11月17日 08:52
Django transaction.atomic() 的具体作用和用法?
2025年10月31日 23:35
django 批量操作的方法有哪些?如何高效的批量更新django内容
2025年10月31日 23:30
Django get_FOO_display() 方法,Django模型中原生方法总结
2025年10月13日 20:56
django字段查找(Field Lookups)总结,django查询中指定特定的条件或对字段的处理方法
2025年10月8日 23:07


















