Лучше Django Админ ManyToMany Поле Виджет



Я нахожу значение по умолчанию администратора Django models.ManyToManyField виджет, чтобы быть громоздким для использования. Это же HTML select элемент и если у вас есть много объектов "другой" модели, то это довольно непрактично, чтобы на самом деле найти "другие" объекты, которые вы хотите связать с "этим" объектом. И если у вас есть большое объектов" другой " модели, кажется, даже замедляет рендеринг страницы администратора.



Я знаю, что могу построить свой собственный пользовательский виджет администратора и применить его к my ManyToManyFields Как я считаю нужным, но есть ли там какие-то готовые, которые я мог бы использовать вместо этого? В моих мечтах я представляю себе автоматически заполняющийся текстовый ввод HTML-виджета. Это даже практично/возможно сделать в рамках администратора Django?



спасибо.

617   4  

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

    Ничего не найдено.