2011-08-29 32 views
30

Trong một mô hình, tôi có điều này:Làm thế nào để loại bỏ tất cả các mối quan hệ từ manytomany?

class MyModel(models.Model): 
    relations = models.ManyToManyField(OtherModel) 
    .... 

và nếu tôi chọn:

my_object.relations.remove(other_model_object) 

nó hoạt động.

Làm thế nào để loại bỏ tất cả các đối tượng khỏi các mối quan hệ? my_object.relations.clean() không hoạt động.

+4

lệnh .remove() và .clear() sẽ loại bỏ các mối quan hệ, nhưng họ sẽ không thực sự xóa các đối tượng liên quan ... là những gì bạn đang cố gắng làm? – Brandon

+0

Vâng, rất cảm ơn. – Nips

+0

xem tại đây http://stackoverflow.com/questions/4719137/how-do-i-remove-multiple-objects-in-a-manytomany-relationship-based-on-a-filter – madjardi

Trả lời

33

Trước tiên, bạn cần xóa (các) mối quan hệ bằng cách sử dụng .clear() hoặc .remove(), tùy theo điều kiện nào phù hợp với nhu cầu của bạn tốt hơn according to the docs.

Sau đó, bạn sẽ cần phải xóa (các) đối tượng bằng cách sử dụng [YourModel]. delete() phương pháp.

23

Nếu bạn chỉ cần xóa mối quan hệ cho tất cả các trường hợp giữa 2 mô hình thì bạn có thể thực hiện điều đó bằng cách truy cập Trình quản lý của bảng quan hệ. Bảng mối quan hệ m2m có thể được truy cập thông qua MyModel.relations.through để xóa các mối quan hệ đó trở nên dễ dàng:

MyModel.relations.through.objects.all().delete() 

tham khảo:

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.through

+25

Hãy cẩn thận với điều này vì điều này sẽ xóa tất cả các hàng trong bảng m2m như gọi through.objects decouple m2m từ MyModel. Vì vậy, bạn cần phải làm một cái gì đó như 'Author.books.through.objects.filter (author_id = author.pk) .delete()' – Christoffer

+0

đây là những gì tôi đang tìm kiếm. hữu ích, nhưng không phải là câu trả lời đúng. – benzkji

+0

Cảnh báo! Đây là chức năng thực sự nguy hiểm vì nó sẽ xóa toàn bộ bảng quan hệ! –

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