Переопределение размера Django Admin Multi-select Widget
Новый вопрос Django: я бы хотел, чтобы администратор Django отображал больше рядов вариантов в виджетах с несколькими выборами. У меня очень длинный список для выбора, а по умолчанию 4 строки просто не удобны, особенно при прокрутке.
Прямо сейчас этот виджет отображается как выбрать несколько, но я бы хотел, чтобы он был , выберите несколько size = "12" . В идеале это должно быть для определенных полей, но я могу жить со всеми рендерингами полей с одинаковым атрибутом размера.
Итак, где будет оптимальное место в Django, чтобы изменить это?
Ответы
Ответ 1
Я сделал это в 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)
Ответ 2
Если у вас длинный выбор, который будет продолжать расти, я рекомендую использовать виджет автозаполнения.
В любом случае, вы могли бы:
Ответ 3
Мне удалось сделать число строк в соответствии с начальным числом связанных строк таблицы, однако оно не обновляется динамически (возможно, нужно вставить 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