J'ai réussi à désactiver l'action "Supprimer sélectionné". Facile.Dans Django Admin comment désactiver le lien Supprimer
Mais un utilisateur peut toujours cliquer sur un élément, puis sur le lien rouge Supprimer en bas.
J'ai réussi à désactiver l'action "Supprimer sélectionné". Facile.Dans Django Admin comment désactiver le lien Supprimer
Mais un utilisateur peut toujours cliquer sur un élément, puis sur le lien rouge Supprimer en bas.
Eh bien, vous utilisez probablement:
AdminSite.disable_action('delete_selected')
Pour un contrôle plus juste mettre en œuvre votre propre administration et définir ses actions à tout ce dont vous avez besoin:
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
Référence: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
désactiver simplement l'autorisation yourapp.delete_yourmodel
pour cet utilisateur ou le groupe auquel il appartient.
Cela ne fonctionne pas dans Django 1.3 et versions antérieures, à cause de ce problème https://code.djangoproject.com/ticket/8060 Il est corrigé dans Django 1.4. –
simple :)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
L'action est toujours dans la liste déroulante, mais jette un 403. interdit Pour le nettoyer, vous devez suivre ma solution. Plus le faire aussi bien. – radtek
Voulez-vous supprimer la liste déroulante, dans ce cas, suivez la solution de radtek – thevangelist
@radtek Vous avez raison, l'action sera toujours dans la liste déroulante, mais l'OP a déclaré qu'il a déjà réussi à désactiver l'action de suppression sélectionnée . Donc c'est tout ce qui est nécessaire. – McKay
Si vous souhaitez désactiver un un particulier qui ne fait cette coutume. En django 1.6.6 j'ai dû étendre get_actions
plus définir has_delete_permission
. La solution has_delete_permission
ne se débarrasse pas de l'action dans le menu déroulant pour moi:
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
Non compris dans actions = ['your_custom_action']
, ne fonctionne que pour les actions personnalisés (defs) que vous avez définis pour ce modèle. La solution AdminSite.disable_action('delete_selected')
, pour tous désactive les modèles, vous devrait inclure explicitement les plus tard par chaque modelAdmin
Je ne comprends pas pourquoi retourner has_delete_permission comme faux ne se débarrasse pas de l'action. Je devais faire les deux en django 1.6.6 – radtek
admin.site.disable_action('delete_selected')
De l'docs
ne fonctionne pas. N'affecte pas la page individuelle. Désactive simplement l'action lorsque vous parcourez la liste. –