created:09-02-2021
views:61
0

经常会在模型的save方法中看到类似的判断语句,

比如:

class Model():                    
    ...                        
    def save(self, *args, **kwargs):                                                
        if self._state.adding and not self.slug:                                        
            ...

测试

asked 8 months, 3 weeks ago
user image FirprinTeam
添加评论
评论需要先登录哦o( ̄ε ̄*)
0

根据django官方文档,_state属性指一个用于追踪模型实例的生命周期的ModelState对象。

ModelState对象具有两个属性:

  • adding: 如果模型实例还没有被保存到数据库,则adding=True,而db=False
  • db: 相反,如果模型实例已保存导数据库,则db=True, 而adding=False

所以,_state属性在save方法中用于判断实例是否是新创建的。

问题中的例子就是同时使用_state和slug (url 别名,没保存时没有)同时判断,两者都为True则表明正在处理的对象没有被保存过,也就可以继续执行if下的逻辑。

参考:

09-02-2021
添加评论
评论需要先登录哦o( ̄ε ̄*)
添加回答