django clear()和delete()之间的区别

ela*_*ver 9 python django

我现在正在使用django一段时间,最近碰到了这个:

user.groups.clear()
Run Code Online (Sandbox Code Playgroud)

通常我要做的是:

user.groups.all().delete()
Run Code Online (Sandbox Code Playgroud)

有什么不同?

Sel*_*cuk 14

user.groups.all().delete()删除相关的组对象,而user.groups.clear()只会取消关联:

https://docs.djangoproject.com/en/1.7/ref/models/relations/#django.db.models.fields.related.RelatedManager.clear

从相关对象集中删除所有对象:注意,这不会删除相关对象 - 它只是取消它们的关联.

请注意,删除相关对象可能会产生副作用,即属于同一组的其他用户也可能会被删除(通过级联),具体取决于指定的ForeignKey规则on_delete.


Ala*_*air 5

user.groups.clear()
Run Code Online (Sandbox Code Playgroud)

这将取消用户与组的链接,但不会影响组本身。

user.groups.all().delete()
Run Code Online (Sandbox Code Playgroud)

这将删除实际组。您可能不想这样做,因为可能还有其他用户也属于这些组。