Лучший Виджет Поля Django Admin ManyToMany
Я нахожу значение по умолчанию администратора Django models.ManyToManyField
виджет, чтобы быть громоздким для использования. Это HTML-код выберите элемент, и если у вас есть много объектов "другой" модели, то совершенно непрактично на самом деле найти "другие" объекты, которые вы хотите связать с "этим" объектом. И если у вас есть большое объектов" другой " модели, похоже, даже замедляет рендеринг страницы администратора.
Я знаю, что могу построить свой собственный пользовательский виджет администратора и применить его к my ManyToManyFields
Как я считаю нужным, но есть ли какие-либо готовые, которые я мог бы использовать вместо этого? В моих снах я представляю себе автозаполнение текстового ввода HTML-виджета. Это даже практично / возможно сделать в рамках администратора Django?
спасибо.
4 ответов
попробуйте использовать filter_horizontal
атрибут класса admin, например:
class SomeModelAdmin(admin.ModelAdmin):
filter_horizontal = ('users',)
как говорится в документация, "добавление ManyToManyField в этот список вместо этого будет использовать изящный ненавязчивый интерфейс JavaScript "filter", который позволяет искать в параметрах". 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