Ich versuche, ein Viel zu viele Bereich von Django 1.8 Admin Größe.How to resize django ManyToManyField Widget auf der Admin-Seite
models.py
from django.db import models
class Material(models.Model):
type = models.CharField(max_length=20, primary_key=True)
def __unicode__(self):
return self.type
class Pen(models.Model):
label = models.CharField(max_length=20, blank=True, default='')
materials = models.ManyToManyField(Material)
admin.py
from django.contrib import admin
from django.conf.urls import url
from .models import *
from django.forms import SelectMultiple
@admin.register(Pen)
class PenAdmin(admin.ModelAdmin):
filter_horizontal = ('materials',)
#formfield_overrides = { models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'5', 'width': '50px', 'style': 'width:50px'})}, }
def get_form(self, request, obj=None, **kwargs):
form = super(PenAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['materials'].widget.attrs['style'] = 'width: 70px;'
return form
class Media:
js = ("js/resize_fields.js",)
@admin.register(Material)
class MaterialAdmin(admin.ModelAdmin):
pass
resize_fields.js
document.onload = function() {
document.getElementById("id_materials_to").style.width="70px";
};
Wie man sehen kann ich versuchte, 3 Ansätze:
1: using formfield_overrides. Es machte keinen Unterschied.
2: Laden eines Javascript, um die Größe des HTML-Objekts zu ändern. Es wird zwar hochgefahren, aber nicht skaliert, da das Skript scheinbar vor dem Laden des Widgets ausgeführt wird.
3: mit get_form. Wie unten gezeigt, ändert es nur die Größe eines der Auswahlfelder.
Wer weiß, wie es horizontal zu skalieren?
UPDATE: Ich entdeckte, dass:
class PenAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'5', 'style': 'color:blue;width:250px'})},
}
funktionieren würde, da ich filter_horizontal entfernt, aber ich will filter_horizontal nutzen zu können! Wenn ich mich nicht irre, verwendet die filter_horizontal-Option das MultiWidget, das Override-Attribute offenbar nicht an Sub-Widgets übergibt. Dennoch denke ich, es muss eine Lösung geben, wo ich nach dem Laden der Seite ein Javascript ausführen kann. plz help
Dank. Es funktionierte. – max