2015-03-30 11 views

Odpowiedz

9

user.groups.all().delete() będzie usuwać powiązanych obiektów grupowych, natomiast user.groups.clear() będzie odciąć tylko relację:

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

usuwa wszystkie obiekty z powiązanego zestawu obiektów: Uwaga ta nie usuwa powiązane obiekty - po prostu je oddziela.

Zauważmy, że usuwając odpowiednie obiekty mogą mieć efekt uboczny, że inni użytkownicy należący do tej samej grupy mogą być również usuwane (przez kaskady), w zależności od zasad określonych przez on_delete ForeignKey.

+0

Kaskada będzie działała tylko w jedną stronę, od celu 'ForeignKey' do powiązanych obiektów - w tym przypadku tylko od obiektu grupy do modelu pośredniego, który łączy użytkownika i grupę, ponieważ jest to wiele do - wiele relacji. Usunięcie grupy nigdy nie usunie jej użytkowników, przynajmniej nie podczas używania 'PermissionsMixin' Django używanego przez' AbstractUser' lub 'User'. – knbk

4
user.groups.clear() 

Powoduje to odłączenie grup od użytkownika, ale nie ma wpływu na same grupy.

user.groups.all().delete() 

Powoduje usunięcie rzeczywistych grup. Prawdopodobnie nie chcesz tego robić, ponieważ mogą istnieć inni użytkownicy, którzy również należą do tych grup.