Лучше Django Админ ManyToMany Поле Виджет
Я нахожу значение по умолчанию администратора Django models.ManyToManyField виджет, чтобы быть громоздким для использования. Это же HTML select элемент и если у вас есть много объектов "другой" модели, то это довольно непрактично, чтобы на самом деле найти "другие" объекты, которые вы хотите связать с "этим" объектом. И если у вас есть большое объектов" другой " модели, кажется, даже замедляет рендеринг страницы администратора.
Я знаю, что могу построить свой собственный пользовательский виджет администратора и применить его к my ManyToManyFields Как я считаю нужным, но есть ли там какие-то готовые, которые я мог бы использовать вместо этого? В моих мечтах я представляю себе автоматически заполняющийся текстовый ввод HTML-виджета. Это даже практично/возможно сделать в рамках администратора Django?
спасибо.
4 ответов:
попробуйте использовать
filter_horizontalатрибут вашего класса администратора, например:class SomeModelAdmin(admin.ModelAdmin): filter_horizontal = ('users',)как говорится в документация, "добавление ManyToManyField в этот список вместо этого будет использовать отличный ненавязчивый интерфейс JavaScript "фильтр", который позволяет искать в настройках".
filter_verticalделает то же самое с немного другой макет.
вы можете попробовать использовать raw id в admin. и документы django: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields
Если вы ищете что-то с автозаполнением вы можете посмотреть на это в качестве отправной точки http://code.djangoproject.com/wiki/AutoCompleteSolutions
и, наконец, очень простой рядный Пример:
models.py
class SomeModel(models.Model): users = models.ManyToMany(User)admin.py:
class SomeModelAdmin(admin.ModelAdmin): raw_id_fields = ("users",)
Я на самом деле не играл с ним, но я нашел эта многообещающая библиотека ссылка в другом месте.
похоже, он делает именно то, что я хотел. Вместо того, чтобы загружать весь список связанных объектов (независимо от того, сколько есть!) и представляя вам с подборщиком, чтобы выбрать несколько из них, как
filter_horizontalделает, он представляет окно поиска / фильтра и использует вызовы typeahead/автозаполнения для динамического получения результатов. Это отлично подходит для случая, когда у вас есть может быть, 5000 пользователей и хотят выбрать 3 или 4 из них, не дожидаясь 5k<option>элементы для загрузки и рендеринга.
Это старый вопрос, но я хочу добавить ответ здесь для людей, которые находят это так же, как и я: эта ситуация-именно то, для чего нужны встроенные администраторы Django. В частности, я использую TabularInlines с необработанными полями идентификаторов для отношений "многие ко многим", которые имеют слишком много вариантов.
https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.TabularInline
Comments