Django Admin创建模型对象的方法调用规则及相关问题咨询
Django模型方法调用相关问题解答
1. Django Admin保存对象时的实际调用方法
你之前对纯Python类的认知是正确的,Django模型实例化时同样会调用父类Model内置的__init__方法,和你是否显式重写该方法无关,这一步的作用是在内存中完成实例属性的初始化。
而Django Admin保存对象的完整流程会先后调用两个核心方法:
- 第一步:接收表单提交的参数,调用
__init__方法实例化Employee对象,把name、dept等字段值赋值给实例属性 - 第二步:调用模型的
save()方法,把内存中的实例数据持久化写入数据库
你在文档中看到的「创建模型对象时调用save方法」,特指的是持久化到数据库这个环节,并不会跳过__init__的执行。
2. POST API创建对象的调用逻辑
和Django Admin的调用逻辑完全一致。
不管你用原生Django视图、还是DRF等框架处理POST请求创建模型对象,只要走标准ORM操作流程,都会先执行__init__实例化对象,再执行save()写入数据库。
哪怕你用Employee.objects.create(name="xxx", dept="xxx")的语法糖快速创建对象,本质也是Django内部封装了「实例化+调用save」的两步操作,底层两个方法依然会顺序执行。
3. __str__方法的自动调用逻辑
__str__是Python的内置魔术方法,所有需要把对象转换为字符串的场景,Python解释器都会自动调用该方法,不需要开发者显式编写调用逻辑。
Django Admin在列表页、详情页等位置展示模型实例的可读名称时,本质就是要把实例对象转为字符串展示给用户,所以会自动触发你重写的__str__方法。除了Admin之外,直接打印实例、在Django模板中直接输出实例变量时,也会自动调用该方法。
内容的提问来源于stack exchange,提问作者Reactoo
相关产品推荐
相关产品推荐

