Używam Django na chwilę teraz i niedawno natknąłem się na to:różnica między Django clear() i delete()
user.groups.clear()
zwykle co zrobiłbym to:
user.groups.all().delete()
jaka jest różnica?
Używam Django na chwilę teraz i niedawno natknąłem się na to:różnica między Django clear() i delete()
user.groups.clear()
zwykle co zrobiłbym to:
user.groups.all().delete()
jaka jest różnica?
user.groups.all().delete()
będzie usuwać powiązanych obiektów grupowych, natomiast user.groups.clear()
będzie odciąć tylko relację:
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.
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.
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