Tôi đã vô hiệu hóa tác vụ "Xóa đã chọn". Dễ dàng.Trong Django Admin làm cách nào để vô hiệu hóa liên kết Xóa
Nhưng người dùng vẫn có thể nhấp vào một mục và sau đó có liên kết Xóa màu đỏ ở dưới cùng.
Tôi đã vô hiệu hóa tác vụ "Xóa đã chọn". Dễ dàng.Trong Django Admin làm cách nào để vô hiệu hóa liên kết Xóa
Nhưng người dùng vẫn có thể nhấp vào một mục và sau đó có liên kết Xóa màu đỏ ở dưới cùng.
Vâng, bạn có thể đang sử dụng:
AdminSite.disable_action('delete_selected')
để kiểm soát thêm chỉ thực hiện quản trị của riêng bạn và thiết lập các hành động của mình cho bất cứ điều gì bạn cần:
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
tham khảo: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
Đơn giản chỉ cần vô hiệu hóa sự cho phép yourapp.delete_yourmodel
cho người dùng đó hoặc nhóm mà anh ta thuộc về.
Điều này không hoạt động ở phiên bản Django 1.3 và phiên bản cũ hơn, vì vấn đề này https://code.djangoproject.com/ticket/8060 Nó được sửa trong Django 1.4. –
đơn giản :)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
Hành động vẫn nằm trong danh sách thả xuống, nhưng ném 403 bị cấm. Để làm sạch nó, bạn phải tuân thủ giải pháp của tôi. Plus làm điều này là tốt. – radtek
Bạn có muốn xóa menu thả xuống hay không, trong trường hợp đó, hãy làm theo giải pháp của radtek – thevangelist
@radtek Bạn chính xác, hành động sẽ vẫn nằm trong danh sách thả xuống, nhưng OP đã tuyên bố rằng anh ta đã quản lý để vô hiệu hóa thao tác xóa đã chọn . Vì vậy, đây là tất cả những gì cần thiết. – McKay
Nếu bạn muốn vô hiệu hóa một ai cụ thể mà không được tùy chỉnh làm điều này. Trong django 1.6.6 tôi đã phải mở rộng get_actions
cộng với xác định has_delete_permission
. Các giải pháp has_delete_permission
không thoát khỏi những hành động từ danh sách thả xuống cho tôi:
class MyModelAdmin(admin.ModelAdmin):
....
def get_actions(self, request):
#Disable delete
actions = super(MyModelAdmin, self).get_actions(request)
del actions['delete_selected']
return actions
def has_delete_permission(self, request, obj=None):
#Disable delete
return False
Không bao gồm nó trong actions = ['your_custom_action']
, chỉ có tác dụng cho những hành động tùy chỉnh (defs) bạn đã xác định cho mô hình đó. Các giải pháp AdminSite.disable_action('delete_selected')
, vô hiệu hóa nó cho tất cả các mô hình, do đó bạn sẽ phải rõ ràng bao gồm chúng sau mỗi mỗi modelAdmin
Tôi không hiểu tại sao trả về has_delete_permission là false không loại bỏ được hành động. Tôi phải làm cả trong django 1.6.6 – radtek
admin.site.disable_action('delete_selected')
Từ docs
Không làm việc. Không ảnh hưởng đến trang riêng lẻ. Chỉ cần vô hiệu hóa tác vụ khi duyệt danh sách. –