[Kaum nutzt man das ein paar Monate nicht, schon ist das Wissen wieder weg...]
Ich würde im Admin-UI gerne hinter einem Zahlen-Eingabefeld noch den Text "Min" anzeigen, um klarzustellen, dass man dort Minuten eingeben soll. Wie kann ich dies am Einfachsten machen?
Ich würde außerdem gerne bei Text-Feldern die Höhe beeinflussen können. Diese sind mit ihren 10 Zeilen eigentlich immer zu hoch bzw. nicht hoch genug.
Für eine ManyToMany-Relation zu Kategorien würde ich statt eines Listensfelds mit selektierten Zeilen lieber entweder zwei Listen mit den ausgewählten und auswählbaren Kategorien sehen oder vorzugsweise eine kommagetrenne Liste der Katogrien, die man dann in einen weiteren Fenster bearbeiten kann, wenn man das will. Gibt es da schon etwas Fertiges?
Schließlich käme es mir gelegen, wenn ich die Label über den Eingabefeldern anzeigen und dafür mehr als ein Feld nebeneinander anzeigen könnte, aber das geht auch in der neusten Version noch nicht, oder?
Stefan
Django-Admin: Fragen zum Anpassen
Ein paar Dinge ergeben sich aus der Dokumentation: Setzt man `filter_horizontal=('categories',)` so wird die Liste durch das beschriebene Widgets aus zwei nebeneinander stehenden Listen ersetzt. Sieht nicht schön aus, ist aber nicht ganz so fehleranfällig zu bedienen.
Mehrere Felder nebeneinander bekommt man über `fieldsets`. Und wenn man bei der CSS-Definition `.aligned label` das `float:left` entfernt, stehen die Label auch über den Texten.
Der Rest ergibt sich, wenn man den Quelltext liest: Um ein Widget zu modifizieren, habe ich mir folgenden Hack für das AdminModel rausgesucht:
Für meine erste Aufgabe habe ich mir diesen hässlichen Code gebaut:
den ich dann ebenfalls in `formfield_for_dbfield` als Widget einbaue.
Danke für's Zuhören.
Stefan
Mehrere Felder nebeneinander bekommt man über `fieldsets`. Und wenn man bei der CSS-Definition `.aligned label` das `float:left` entfernt, stehen die Label auch über den Texten.
Der Rest ergibt sich, wenn man den Quelltext liest: Um ein Widget zu modifizieren, habe ich mir folgenden Hack für das AdminModel rausgesucht:
Code: Alles auswählen
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'subtitle':
del kwargs['request']
kwargs['widget'] = admin.widgets.AdminTextareaWidget(attrs={'rows': 3})
return db_field.formfield(**kwargs)
return super(VideoAdmin, self).formfield_for_dbfield(db_field, **kwargs)
Code: Alles auswählen
class UnitTextField(admin.widgets.AdminIntegerFieldWidget):
def render(self, *args, **kwargs):
from django.utils.safestring import mark_safe
return super(UnitTextField, self).render(*args, **kwargs) + mark_safe(" Min")
Danke für's Zuhören.
Stefan
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich hab dafür ein kleines JS Skript gemacht:sma hat geschrieben:Ich würde außerdem gerne bei Text-Feldern die Höhe beeinflussen können. Diese sind mit ihren 10 Zeilen eigentlich immer zu hoch bzw. nicht hoch genug.
Code: Alles auswählen
function textarea_resize() {
//
// Resize all textareas
//
textareas = document.getElementsByTagName("textarea");
for (var i = 0; i <= textareas.length-1; i++) {
try {
textarea = textareas[i];
try {
rows = textarea.firstChild.data.split("\n").length;
if (rows > 30) {
rows = 30;
}
} catch(e) {
rows = 5;
}
textarea.rows = rows;
} catch (e) {
alert("textarea_resize() error:" + e);
}
}
}
textarea_resize()
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das ganze nochmal per jQuery:
Code: Alles auswählen
<script type="text/javascript">
MAX_ROWS = 25;
$(document).ready(function(){
$("textarea").each(function (i) {
rows = this.value.split("\n").length;
if (rows > MAX_ROWS) {rows = MAX_ROWS;}
this.rows = rows;
});
});
</script>
Ich würde dir gern nochmals zuhörenMehrere Felder nebeneinander bekommt man über `fieldsets`. Und wenn man bei der CSS-Definition `.aligned label` das `float:left` entfernt, stehen die Label auch über den Texten.
Wie bekommt man über fieldsets mehrere Felder nebeneinander?
Stefanhttp://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets hat geschrieben:To display multiple fields on the same line, wrap those fields in their own tuple. In this example, the first_name and last_name fields will display on the same line:
Code: Alles auswählen
{ 'fields': (('first_name', 'last_name'), 'address', 'city', 'state'), }
Keine Ahnung. Automatisch nicht. Aber mit genug CSS-fu sollte man's hinbekommen. Wenn man die Templates nicht ändern will, wäre vielleicht jquery eine Alternative. Hat zwar was von Monkey-Patching, aber egal, oder?
Stefan
Stefan