programing tip

Django Admin에서 삭제 링크를 비활성화하는 방법

itbloger 2020. 11. 16. 07:53
반응형

Django Admin에서 삭제 링크를 비활성화하는 방법


"선택 항목 삭제"작업을 비활성화했습니다. 쉬운.

그러나 사용자는 여전히 항목을 클릭 할 수 있으며 하단에 빨간색 삭제 링크가 있습니다.


단순 :)

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

사용자 지정이 아닌 특정 항목을 비활성화하려면이 작업을 수행하십시오. 장고 1.6.6에서 나는 확장했다 get_actions플러스 정의합니다 has_delete_permission. has_delete_permission솔루션은 나를 위해 드롭 다운 메뉴에서 작업을 제거하지 않습니다

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

에 포함하지 않고 actions = ['your_custom_action']해당 모델에 대해 정의한 사용자 지정 작업 (def)에 대해서만 작동합니다. 솔루션 AdminSite.disable_action('delete_selected')은 모든 모델에 대해 비활성화하므로 나중에 각 modelAdmin에 대해 명시 적으로 포함해야합니다.


yourapp.delete_yourmodel해당 사용자 또는 그가 속한 그룹에 대한 권한을 비활성화하기 만하면 됩니다.


아마도 다음을 사용하고있을 것입니다.

AdminSite.disable_action('delete_selected')

추가 제어를 위해 자신의 관리자를 구현하고 필요한 모든 작업을 설정하십시오.

class MyModelAdmin(admin.ModelAdmin):
    actions = ['whatever', 'actions']

참조 : http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action


admin.site.disable_action('delete_selected')

로부터 문서


여기의 솔루션은 이미 훌륭하지만 다음과 같이 재사용 가능한 믹스 인으로 사용하는 것을 선호합니다.

class NoDeleteAdminMixin:
    def has_delete_permission(self, request, obj=None):
        return False

다음과 같이 삭제를 방지하려는 모든 관리자에서 이것을 사용할 수 있습니다.

class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
    ...

이것은 매우 오래되었지만 여전히 누군가를 도울 수 있습니다.

그 OP의 가정

... 사용자는 여전히 항목을 클릭 할 수 있으며 하단에 빨간색 삭제 링크가 있습니다.

"변경"보기의 빨간색 버튼을 나타냅니다. 이 버튼은 ModelAdmin.change_view다음과 같이 메소드를 확장하여 제거 할 수 있습니다 .

def change_view(self, request, object_id=None, form_url='', extra_context=None):
    return super().change_view(request, object_id, form_url,
                               extra_context=dict(show_delete=False))

show_save, 및 에서도 동일한 작업을 수행 할 수 있습니다 show_save_and_continue. 여기에 더 많은 정보와 대안이 있습니다 .

Also note that Django 2.1 now has a separate has_view_permission (docs), which may be a better option, depending on your use case.

참고URL : https://stackoverflow.com/questions/4043843/in-django-admin-how-do-i-disable-the-delete-link

반응형