在检索保存的实例时执行ORM调用init



我正在进行迁移,将一个可为null的字段更改为不可为null。新的__init__例程通过执行一些自定义的健美操来获得合适的默认值,从而确保字段不能为空。

问题是,迁移现有数据以应用默认的新规则是否至关重要,还是只要检索到遗留对象,这些规则就会自动应用?

读取源代码时,我怀疑ORM恢复了保存的数据,因此我需要更新所有旧记录。但我需要另一双眼睛。

ORM在检索保存的实例时是否调用init?

django创建模型实例时,是否在模型上调用__init__?简短的回答是肯定的。如果使用get或对查询集进行切片或对其进行迭代,则将调用__init__

MyModel.objects.get(pk=1)
MyModel.objects.all()[2]
for p in MyModel.objects.all():
   print p.pk

然而,覆盖CCD_ 4不是控制模型加载行为的推荐方式。应该使用from_db

from_db()方法可用于自定义模型实例创建从数据库加载时。

db参数包含数据库模型的数据库别名field_names包含所有已加载字段的名称,values包含field_ name中每个字段的加载值。

最新更新