Ich habe ein benutzerdefiniertes TagField-Formularfeld.Django Admin - Überschreiben des Widgets eines benutzerdefinierten Formularfelds
class TagField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagField, self).__init__(*args, **kwargs)
self.widget = forms.TextInput(attrs={'class':'tag_field'})
Wie oben zu sehen, wird ein TextInput-Formularfeldwidget verwendet. Aber in admin möchte ich es mit Textarea Widget angezeigt werden. Dafür gibt es formfield_overrides
Haken, aber es funktioniert nicht für diesen Fall.
Die Admin Erklärung:
class ProductAdmin(admin.ModelAdmin):
...
formfield_overrides = {
TagField: {'widget': admin.widgets.AdminTextareaWidget},
}
Dies hat keine Auswirkung auf dem Formularfeld-Widget und tags
sind nach wie vor mit einem TextInput- Widget gemacht.
Jede Hilfe wird sehr geschätzt.
-
omat
Dies funktionierte nicht für mich, Sie müssen eine Instanz des Widgets übergeben, anstatt die Klasse. Die Instanz funktionierte jedoch perfekt. –
Normalerweise würde ich benutzerdefinierte Admin-Formulare in admin.py erstellen und sie nicht mit forms.py mischen. Dadurch werden Verwechslungen für andere Entwickler vermieden und alle administrationsspezifischen Elemente in derselben .py-Datei gespeichert. – MaestroFJP
Guter Punkt @ MaestroFJP. Genau das habe ich in meinem neueren Code gemacht. Oder haben Sie ein Submodul von forms/admin.py, wenn Sie wirklich komplizierte Formulare haben, und viele von ihnen. –