Ich habe eine Django-Seite mit vielen Modellen und Formen. Ich habe viele benutzerdefinierte Formulare und Formsets und Inlineformsets sowie benutzerdefinierte Validierungs- und benutzerdefinierte Abfragesätze. Daher hängt die Aktion "Modell hinzufügen" von Formularen ab, die andere Dinge benötigen, und das "Modell hinzufügen" im Django-Administrator durchläuft eine 500 aus einem benutzerdefinierten Abfragesatz.
Gibt es überhaupt eine Möglichkeit, die Funktion 'Add $ MODEL' für bestimmte Modelle zu deaktivieren?
Ich möchte /admin/appname/modelname/add/
eine 404 (oder eine geeignete Fehlermeldung "Geh weg") geben. Ich möchte nicht, dass die Schaltfläche "$ MODELNAME hinzufügen" angezeigt wird /admin/appname/modelname
.
Django admin bietet eine Möglichkeit zum Deaktivieren von Administratoraktionen (http://docs.djangoproject.com/de/dev/ref/contrib/admin/actions/#disabling-actions). Die einzige Aktion für dieses Modell ist jedoch "delete_selected". Das heißt, die Administratoraktionen wirken sich nur auf vorhandene Modelle aus. Gibt es eine django-artige Möglichkeit, dies zu tun?
quelle
Antworten:
Es ist einfach, einfach die
has_add_permission
Methode in IhrerAdmin
Klasse so zu überladen :quelle
admin.site.register(MyModel, MyModelAdmin)
Fügen Sie alles in denadmin.py
App-Ordner des Models ein.obj
Parameter.Standardmäßig erstellt syncdb 3 Sicherheitsberechtigungen für jedes Modell:
Wenn Sie als Administrator angemeldet sind, erhalten Sie ALLES, egal was passiert .
Wenn Sie jedoch eine neue Benutzergruppe mit dem Namen "Allgemeiner Zugriff" erstellen (z. B.) , können Sie NUR die Berechtigungen ÄNDERN und LÖSCHEN für alle Ihre Modelle zuweisen.
Dann hat jeder angemeldete Benutzer, der Mitglied dieser Gruppe ist, keine Berechtigung zum Erstellen. Es wird nichts damit verbundenes auf dem Bildschirm angezeigt.
quelle
Ich denke, das wird dir helfen. Der folgende Code muss sich in der Datei admin.py befinden
Zusätzlich zu den oben genannten, wie von gepostet
quelle
Kopieren Sie einfach den Code aus einer anderen Antwort
In meinem Fall verwende ich Inline
in
service = formset.form.base_fields['service']
base_fields
sind die im Modell definierten Felderfalls im Formular definiert, verwenden Sie:
product = formset.form.declared_fields['product']
siehe auch
quelle
base_fields
unddeclared_fields
das ist das wichtigste Ergebnis, das ich aus diesem Fall gelernt habe.Dies ist eine zu viel verspätete Antwort. Posten Sie dies einfach so, als ob jemand die gleiche Lösung findet.
In der Datei admin.py können Sie Folgendes tun:
Hier macht "readonly_fields" die Magie. Vielen Dank.
quelle