2010-10-28 32 views

Trả lời

9

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

+4

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. –

10

Đơ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ề.

+0

Đ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. –

100

đơn giản :)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin): 
    # Other stuff here 
    def has_delete_permission(self, request, obj=None): 
     return False 
+8

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

+0

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

+1

@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

61

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

+1

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

1

admin.site.disable_action('delete_selected')

Từ docs

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