我正在嘗試調整django 1.8 admin的多對多字段的大小。如何在管理頁面上調整django ManyToManyField小部件
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";
};
正如你可以看到我試過3種方法:
1:使用formfield_overrides。它沒有任何區別。
2:加載一個javascript來調整html對象的大小。它正在啓動,但沒有調整它的大小,因爲腳本似乎在加載小部件之前運行。
3:使用get_form。如下所示,它只調整其中一個選擇框的大小。
有誰知道如何調整水平呢?
UPDATE: 我發現:因爲我刪除filter_horizontal
class PenAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'5', 'style': 'color:blue;width:250px'})},
}
的工作,但我想用filter_horizontal! 如果我沒有弄錯,filter_horizontal選項將使用MultiWidget,它顯然不會將override屬性傳遞給子小部件。 不過,我認爲必須有一個解決方案,我可以在頁面加載後運行javascript。 plz help
謝謝。有效。 – max