经常会在模型的save方法中看到类似的判断语句,
比如:
class Model():
...
def save(self, *args, **kwargs):
if self._state.adding and not self.slug:
...
测试
根据django官方文档,_state
属性指一个用于追踪模型实例的生命周期的ModelState对象。
ModelState对象具有两个属性:
adding
: 如果模型实例还没有被保存到数据库,则adding=True
,而db=False
db
: 相反,如果模型实例已保存导数据库,则db=True
, 而adding=False
所以,_state
属性在save方法中用于判断实例是否是新创建的。
问题中的例子就是同时使用_state
和slug (url 别名,没保存时没有)同时判断,两者都为True
则表明正在处理的对象没有被保存过,也就可以继续执行if
下的逻辑。
参考: