C'è un modo per rimuovere la funzionalità "Aggiungi" sul sito di amministrazione Django? Per alcune entità, voglio solo che l'amministratore di Django sia in grado di visualizzarle o modificare quelle esistenti, ma non di aggiungerne di nuove.Rimuovere la funzionalità "Aggiungi" nell'amministratore di Django
risposta
Certo, è possibile personalizzare amministratore MOLTO granulare seguendo le istruzioni here - Credo che ciò che si vuole può essere ottenuto in parte da esigenze imperative ModelAdmin.save_model(self, request, obj, form, change)
nel proprio ModelAdmin
sottoclasse, per garantire che niente accade sul negozio quando change
è falso (cioè un tentativo di aggiungere piuttosto che cambiare), e in parte annullando ModelAdmin.add_view(self, request, form_url='', extra_context=None)
per visualizzare una "vista di aggiunta" che rende molto chiaro all'amministratore che non sarà possibile aggiungere oggetti attraverso questa rotta. Non ho ancora fatto la personalizzazione specifica dell'amministratore richiesta, ma ne ho fatte altre e sembrano funzionare senza problemi!
È possibile personalizzare l'autorizzazione per ogni gruppo di utenti dall'interfaccia di amministrazione: provare a passare a /admin/auth/group
e dovrebbe essere semplice da lì.
Questo non sarà granulare come la soluzione offerta dalla risposta precedente, ma si prenderà cura della maggior parte delle vostre esigenze senza dover personalizzare l'amministratore.
Ma poichè l'OP desidera in particolare bloccare * l'admin * dal fare certe cose, come afferma chiaramente la domanda, come intende bloccare l'amministratore semplicemente annullando le modifiche ai permessi (specialmente se vuole consentire l'admin FARE un po 'di amministrazione ;-)? –
@Alex: questo è vero - intendevo la mia risposta come un'alternativa più semplice alla tua risposta, ma la semplicità ha ovviamente dei limiti. – anschauung
Se si modificano le autorizzazioni per limitare l'accesso, si otterrà comunque il segno più da un campo FK/MtM. Facendo clic si aprirà una finestra popup con "Autorizzazione negata".
In realtà, è possibile rimuovere completamente il segno più semplicemente non registrando il modello con l'amministratore.
Ho una situazione in cui ho categorie predefinite che voglio che gli utenti siano in grado di selezionare più di una. Il modo migliore per farlo è con un campo Model.ManyToMany. È possibile registrare il modello con l'amministratore, inserire i dati secondo necessità e quindi rimuovere la registrazione.
Vedere: Django Admin - Disable the 'Add' action for a specific model per vera soluzione.
Un modo semplice ed efficace è impostare max_num=0
per quella particolare linea.
Il suggerimento di Satya di impostare max_num = 0 funziona perfettamente.
Per la documentazione Django sulla classe ModelForm:
Per gli utenti con browser JavaScript-enabled, un "aggiungere un altro" collegamento è previsto per consentire un numero qualsiasi di inlines supplementari da aggiungere in aggiunta a quelle previste come risultato dell'argomento extra.
Il collegamento dinamico non verrà visualizzato se il numero di moduli attualmente visualizzati supera max_num o se l'utente non ha JavaScript abilitato.
e
Come con formsets regolari, è possibile utilizzare il MAX_NUM e parametri aggiuntivi per modelformset_factory per limitare il numero di forme in più visualizzati.
MAX_NUM non impedisce gli oggetti esistenti di essere visualizzata
Grazie per la risposta. Speravo in un'impostazione che avrebbe portato a termine questo, come funziona la proprietà save_as ModelAdmin. –
Non sono a conoscenza di tali impostazioni in stock Django 1.0, ma forse c'è qualche> 1.0 e/o un contributo per fornirle - azione 1.0. Qualcosa è ciò che ho bloccato finora (soprattutto perché funziona bene su motore di app, lo confesso ;-). –
Questa risposta rende superflue le cose. Rimozione degli utenti Aggiungi Permission fa il trucco perfettamente per la situazione che hai descritto. (Questo presuppone che sia necessario controllarlo solo per modello e non per istanza.) –