Bạn có thể ghi đè tiết kiệm lớp mô hình của bạn() (không làm gì cả nếu self.pk) và xóa (luôn luôn không làm gì cả)
Nhưng thực sự, mức cơ sở dữ liệu là nơi an toàn nhất cho điều đó. Ví dụ: trong PostgreSQL, bạn có thể viết hai quy tắc đơn giản:
CREATE RULE noupd_myapp_mymodel AS ON UPDATE TO myapp_mymodel
DO NOTHING;
CREATE RULE nodel_myapp_mymodel AS ON DELETE TO myapp_mymodel
DO NOTHING;
Dù bằng cách nào, quản trị viên sẽ không biết gì về điều này, vì vậy mọi thứ vẫn có thể chỉnh sửa được. Xem câu trả lời của tôi cho Whole model as read-only để tìm cách tạo mô hình chỉ đọc trong quản trị viên. Cho các mục đích của bạn, hãy giữ quyền thêm như là, và chỉ khai báo tất cả các trường chỉ đọc khi không thêm.
EDIT: Một lý do tại sao việc ghi đè xóa() trong lớp mô hình của bạn không an toàn, thực tế là "xóa hàng loạt" (Queryset.delete(), ví dụ như hành động hộp kiểm của quản trị viên) sẽ không gọi cho từng trường hợp 'xóa (), nó sẽ đi thẳng đến SQL: https://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects
Nguồn
2012-02-29 21:48:31
Điều tôi không thích về phương pháp này là sau khi nhấp vào lưu, vẫn có thông báo "The ... đã được thay đổi thành công.", không có gì thay đổi. Có cách nào để thay đổi thông báo này thành "Thay đổi bị vô hiệu hóa" không? Hoặc thậm chí tốt hơn, để vô hiệu hóa nhấp vào hàng đó? – WebOrCode
Có cách nào để ngăn chặn 'MyModel.objects.filter (pk = my_model.pk) .update (name =" bob ")' –