delete和QuerySets的upate方法类似,delete也属于批量数据操作,顾名思义delete是删除的意思,拿上次的实体做例子:
Entry.objects.filter(pub_date__year=2010).delete()
这条语句表示删除发布时间为2010年的所有Entry实体集,过滤结果如果有一条或多条的记录,一律被删除。
delete方法实现起来稍微复杂点,如果Entry有关联的记录,默认也会删除掉关联的数据集,比如一个Entry实体有n条SubEntry,那么删除一个Entry的同时,delete也会删除掉n条该Entry实体所关联的SubEntry实体记录。注意这是默认情况。但可以设置这种操作行为,就是在定义SubEntry实体外键的时候,设定on_delete属性来改变这种删除行为。比如SubEntry定义的外键:
entry = models.ForeignKey(Entry, blank=True, null=True, on_delete=models.SET_NULL)
on_delete赋值为models.SET_NULL,当Entry被删除时,关联的SubEntry并没被删除,而是把entry设为空值None;on_delete还有几个值:CASCADE,PROTECT,SET_NULL,SET_DEFAULT,DO_NOTHING,SET(),这几个值或函数,字面上还好理解,具体需要参考这里 。这个超出了讲解范围,以后可以单独讲解。