Переопределение размера 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