python - superuser - django shell




Django Admin-Disabilita l'azione 'Aggiungi' per un modello specifico (2)

Ho un sito di Django con molti modelli e forme. Ho molti moduli e formet personalizzati e inlineformset e convalide personalizzate e queryset personalizzati. Quindi l'azione del modello di aggiunta dipende da moduli che hanno bisogno di altre cose, e il "modello di aggiunta" nell'amministrazione di django passa a 500 da un queryset personalizzato.

Esiste comunque la possibilità di disabilitare la funzionalità "Aggiungi $ MODELLO" per alcuni modelli?

Voglio /admin/appname/modelname/add/ per dare un 404 (o un messaggio di errore 'vai via'), non voglio che il pulsante 'Aggiungi $ MODELNAME' sia nella vista /admin/appname/modelname .

L'amministratore di Django offre un modo per disabilitare le azioni di amministrazione (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions), tuttavia l'unica azione per questo modello è 'delete_selected'. cioè le azioni di amministrazione agiscono solo su modelli esistenti. C'è qualche modo django-esque per fare questo?


È facile, basta sovraccaricare il metodo has_add_permission nella tua classe di amministrazione in questo modo:

class MyAdmin(admin.ModelAdmin):
     def has_add_permission(self, request):
        return False

Di default syncdb crea 3 permessi di sicurezza per ogni modello:

  1. Crea (alias aggiungi)
  2. Modificare
  3. Elimina

Se hai effettuato il login come amministratore, ottieni TUTTO qualsiasi cosa.

Ma se crei un nuovo gruppo di utenti chiamato "Accesso generale" (ad esempio) , puoi assegnare SOLO le autorizzazioni CHANGE ed ELIMINA per tutti i tuoi modelli.

Quindi qualsiasi utente che abbia effettuato l'accesso che sia membro di quel gruppo non avrà il permesso "Crea", sullo schermo non verrà mostrato nulla ad esso correlato.







django-admin