2015-03-30 21 views
6

Tôi đang sử dụng django trong một thời gian bây giờ và thời gian gần đây tình cờ gặp này:django chênh lệch giữa clear() và xóa()

user.groups.clear() 

thường những gì tôi muốn làm là thế này:

user.groups.all().delete() 

sự khác biệt là gì?

Trả lời

9

user.groups.all().delete() sẽ xóa các đối tượng nhóm có liên quan, trong khi user.groups.clear() sẽ chỉ tách mối quan hệ:

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

Loại bỏ tất cả các đối tượng từ các thiết lập đối tượng có liên quan: Chú giải này không xóa các đối tượng liên quan - nó chỉ tách chúng ra.

Lưu ý là việc xóa các đối tượng liên quan có thể có tác dụng phụ mà người dùng khác thuộc cùng một nhóm cũng có thể bị xóa (bằng cascade), tùy thuộc vào các quy tắc được xác định bởi ForeignKey on_delete.

+0

Các thác sẽ chỉ bao giờ làm việc một cách, từ mục tiêu của 'ForeignKey' các đối tượng liên quan của nó - trong trường hợp này chỉ từ đối tượng nhóm với mô hình trung gian liên kết người dùng và nhóm, vì nó là một nhiều-to -tương quan. Loại bỏ một nhóm sẽ không bao giờ xóa người dùng của nó, ít nhất là không phải khi sử dụng 'PermissionsMixin' của Django như được sử dụng bởi' AbstractUser' hoặc 'User'. – knbk

4
user.groups.clear() 

Điều này sẽ hủy liên kết các nhóm khỏi người dùng nhưng không ảnh hưởng đến chính nhóm đó.

user.groups.all().delete() 

Thao tác này sẽ xóa nhóm thực. Bạn có lẽ không muốn làm điều này vì có thể có những người dùng khác thuộc về những nhóm là tốt.

Các vấn đề liên quan