Newbie Django问题:我希望Django管理员在多选小部件中显示更多行选项。我有一个非常长的列表可供选择,默认的4行只是不方便,尤其是在滚动时。
目前,该窗口小部件呈现为选择多个,但我希望选择多个尺寸=“12”。理想情况下,这应该适用于特定字段,但我可以使用相同大小属性的所有字段渲染。
那么Django改变它的最佳位置是什么?
答案 0 :(得分:21)
我在admin.py中通过为所有ManyToManyField项设置一个毯子大小来做到这一点,例如:
from django.contrib import admin
from django.forms import SelectMultiple
from django.db import models
from models import *
class RiverAdmin(admin.ModelAdmin):
formfield_overrides = { models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'10'})}, }
admin.site.register(River, RiverAdmin)
答案 1 :(得分:14)
如果您选择的长片会继续增长,我建议使用autocomplete widget。
无论如何,你可以:
Create a ModelForm ,对于相关模型
Override the default widget ,对于相关字段,
Set widget's size attribute 满足您的需求
Enable that form in ModelAdmin ,例如
class YourModelForm(forms.ModelForm):
class Meta:
model = YourModel
widgets = {
'your_field': forms.SelectMultiple(attrs={'size': 12})
}
class YourModelAdmin(admin.ModelAdmin):
form = YourModelForm
答案 2 :(得分:1)
有一种方法可以做到,那就是覆盖formfield_for_manytomany来设置size属性。
Amazon WorkSpaces
Unable to connect
We couldn't launch your WorkSpace. Please try again.
If you need help, contact your administrator.
答案 3 :(得分:0)
我能够根据相关表行的初始数量来创建行数,但是它不会动态更新(可能需要将Javascript插入管理表单并通过AJAX查询行数,这对于发布来说太大了这里)。
class ProfileAdminForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
widgets = {
# Will dynamically change number of rows in select multiple, however only after server reload.
'spec_profiles': forms.SelectMultiple(attrs={'size': SpecProfile.objects.count()})
}
class ProfileAdmin(admin.ModelAdmin):
form = ProfileAdminForm