ich habe
class Cab(models.Model):
name = models.CharField( max_length=20 )
descr = models.CharField( max_length=2000 )
class Cab_Admin(admin.ModelAdmin):
ordering = ('name',)
list_display = ('name','descr', )
# what to write here to make descr using TextArea?
admin.site.register( Cab, Cab_Admin )
Wie ordne ich das TextArea-Widget dem Feld "Beschreibung" in der Administrationsoberfläche zu?
upd: Nur
in der Admin- Oberfläche!
Gute Idee, ModelForm zu verwenden.
django
django-admin
maxp
quelle
quelle
Antworten:
Sie müssen eine erstellen
forms.ModelForm
, die beschreibt, wie dasdescr
Feld angezeigt werden soll, und dann anweisenadmin.ModelAdmin
, dieses Formular zu verwenden. Beispielsweise:Das
form
Attribut vonadmin.ModelAdmin
ist in der offiziellen Django-Dokumentation dokumentiert. Hier ist ein Ort zum Anschauen .quelle
formfield_for_dbfield
Ihre überschreibenModelAdmin
, siehe meine Antwort unten.django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited
fields = '__all__'
unter hinzufügenclass Meta:
.get_form
Methode überschreiben . Siehe meine Antwort .In diesem Fall ist es wahrscheinlich die beste Option, in Ihrem Modell nur ein TextField anstelle von CharField zu verwenden. Sie können auch die
formfield_for_dbfield
Methode IhrerModelAdmin
Klasse überschreiben :quelle
formfield.widget = forms.Textarea()
durchformfield.widget = forms.Textarea(attrs=formfield.widget.attrs)
, damit alle Attribute automatisch für das TextField generiert werden. Danke!super()
. Sonst nein.Ayaz hat ziemlich genau das Richtige, bis auf eine kleine Änderung (?!):
Sie müssen also kein Feld in der ModelForm neu definieren, um das Widget zu ändern. Legen Sie einfach das Widget-Diktat in Meta fest.
quelle
Sie können Ihr eigenes Feld mit der erforderlichen
formfield
Methode unterordnen:Dies wirkt sich auf alle generierten Formulare aus.
quelle
Sie müssen die Formularklasse nicht selbst erstellen:
Siehe ModelAdmin.get_form .
quelle
Wenn Sie versuchen, den Textbereich auf admin.py zu ändern, ist dies die Lösung, die für mich funktioniert hat:
Wenn Sie eine MySQL-Datenbank verwenden, wird Ihre Spaltenlänge normalerweise automatisch auf 250 Zeichen festgelegt. Sie sollten daher eine ALTER TABLE ausführen, um die Länge in Ihrer MySQL-Datenbank zu ändern, damit Sie den neuen größeren Textbereich nutzen können, den Sie verwenden habe in dir Admin Django Seite.
quelle
models.CharField
Verwenden Sie anstelle von a einmodels.TextField
fürdescr
.quelle
Sie können
models.TextField
für diesen Zweck verwenden:quelle
Wollte Carl Meyers Antwort erweitern, die bis heute perfekt funktioniert.
Ich verwende immer
TextField
anstelle vonCharField
(mit oder ohne Auswahlmöglichkeiten) und lege Zeichenbeschränkungen eher auf der UI / API-Seite als auf DB-Ebene fest. Damit dies dynamisch funktioniert:Ich habe einen Modellnamen ,
Post
wotitle
,slug
undstate
sindTextField
s undstate
hat Entscheidungen. Die Admin-Definition sieht folgendermaßen aus:Dachte, andere, die nach Antworten suchen, könnten dies nützlich finden.
quelle
formfield_for_dbfield
dokumentiert?