Xóa nhiều đối tượng trong django


104

Tôi cần chọn một số đối tượng để xóa khỏi cơ sở dữ liệu của mình trong django bằng cách sử dụng một trang web. Không có danh mục nào để chọn nên tôi không thể xóa khỏi tất cả chúng như vậy. Tôi có phải triển khai biểu mẫu xóa của riêng mình và xử lý nó trong django hay django có cách nào để thực hiện việc này không? Khi nó được triển khai trong giao diện quản trị.

Câu trả lời:


199

Bạn có thể xóa bất kỳ QuerySet nào bạn muốn. Ví dụ: để xóa tất cả các bài đăng trên blog với một số mô hình Bài đăng

Post.objects.all().delete()

và xóa bất kỳ Bài đăng nào có ngày xuất bản trong tương lai

Post.objects.filter(pub_date__gt=datetime.now()).delete()

Tuy nhiên, bạn cần tìm ra cách để thu hẹp QuerySet của mình. Nếu bạn chỉ muốn một cái nhìn để xóa một đối tượng cụ thể, nhìn vào cái nhìn tổng quát xóa .

BIÊN TẬP:

Xin lỗi vì sự hiểu lầm. Tôi nghĩ câu trả lời nằm ở đâu đó giữa. Để triển khai của riêng bạn, hãy kết hợp ModelFormcác chế độ xem s và chung . Nếu không, hãy xem xét các ứng dụng của bên thứ 3 cung cấp chức năng tương tự. Trong một câu hỏi liên quan , đề xuất là django-filter .


1
Không, bạn đã hiểu sai câu hỏi. Tôi hiểu tôi có thể xóa mọi thứ. Nhưng tôi cần chọn các đối tượng để xóa bằng một biểu mẫu trên trang web. Và sau đó xử lý dữ liệu trả về từ biểu mẫu trong views.py. Sau đó lặp qua những gì được trả về trong biểu mẫu xóa khi nó lặp qua dữ liệu. Nhưng tôi muốn biết phương pháp tốt nhất để thực hiện điều này trong django là gì.
Dean

A, sai lầm của tôi! Tôi sẽ sử dụng ứng dụng của bên thứ ba hoặc các chế độ xem chung với ModelForms.
Matt Luongo

7
@Dean, hãy xem chế độ xem xóa đó. Hoặc bạn có thể chỉ cần viết quan điểm của riêng bạn ... Ý tôi là cuối cùng bạn có thể nhận được danh sách PK và yêu cầu xóa trên mô hình của bạn ... MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete()và tôi chắc chắn rằng bạn muốn điều gì đó để đảm bảo một người ngẫu nhiên không thể xóa tất cả các đối tượng trong DB của bạn bằng cách đoán PK.
Yuji 'Tomita' Tomita

1
@Dean, thật khó để trả lời câu hỏi của bạn nếu không hiểu thêm về nó. Bạn chỉ cần tạo một biểu mẫu cho phép người dùng chọn tiêu chí xóa chính xác (bất kỳ điều gì có thể - thậm chí có thể là một hộp nhập liệu trong đó người ta nhập số ID ... nhưng có thể phức tạp hơn), xây dựng một dạng xem đáp ứng điều đó biểu mẫu, có lẽ thực hiện xác nhận (quyền), và cuối cùng chạy filter(foo).delete()phương thức đó .
Yuji 'Tomita' Tomita

1
Một trong những lý do khiến điều này không đi kèm với khuôn khổ là câu hỏi về ủy quyền chỉnh sửa / xóa và những phức tạp khác được @YujiTomita đề cập. Nếu bạn thực sự cần lọc phức tạp, hãy xem tính năng lọc django và thêm nút xóa gọi QuerySet.delete () nếu người dùng được ủy quyền.
Matt Luongo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.