覆盖Django Admin多选小部件的大小

Tho*_*she 16 django django-admin

新手Django问题:我希望Django管理员在多选小部件中显示更多行选择.我有一个非常长的列表可供选择,默认的4行只是不方便,特别是在滚动时.

现在,该窗口小部件呈现为选择倍数,但我希望它选择多个size ="12".理想情况下,这应该适用于特定字段,但我可以使用相同大小属性的所有字段呈现.

那么Django改变它的最佳位置在哪里?

Jas*_*ion 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)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果为`RiverAdmin`中的相应字段设置了`filter_horizo​​ntal`或`filter_vertical`,则无法使用此功能.我花了一些时间来解决这个问题. (3认同)

jpi*_*pic 15

如果您有一个长期选择,将继续增长,我建议使用自动完成小部件.

无论如何,你可以:

  1. 为相关模型创建ModelForm

  2. 覆盖默认小部件,对于相关字段,

  3. 根据需要设置小部件的大小属性

  4. 例如,在ModelAdmin中启用该表单

    class YourModelForm(forms.ModelForm):
        class Meta:
            model = YourModel
            widgets = {
                'your_field': forms.SelectMultiple(attrs={'size': 12})
            }
    
    
    class YourModelAdmin(admin.ModelAdmin):
        form = YourModelForm
    
    Run Code Online (Sandbox Code Playgroud)