Uważam, że domyślny models.ManyToManyField
widżet Django Admin jest kłopotliwy w użyciu. Jest to element wyboru HTML i jeśli masz dużo obiektów z „innego” modelu, to jest całkiem niepraktyczne znalezienie „innych” obiektów, które chcesz powiązać z „tym” obiektem. A jeśli masz dużo obiektów z „innego” modelu, wydaje się, że nawet spowalnia renderowanie strony Admin.
Zdaję sobie sprawę, że mogę zbudować własny niestandardowy widżet administratora i zastosować go do mojego ManyToManyFields
według własnego uznania, ale czy są tam jakieś gotowe elementy, których mógłbym zamiast tego użyć? W moich snach wyobrażam sobie automatycznie uzupełniający się widget HTML do wprowadzania tekstu. Czy jest to w ogóle praktyczne / możliwe do zrobienia we frameworku administracyjnym Django?
Dzięki.
źródło
możesz spróbować użyć surowego identyfikatora w panelu administracyjnym. oraz dokumentacja django: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields
jeśli szukasz czegoś z autouzupełnianiem, możesz potraktować to jako punkt wyjścia http://code.djangoproject.com/wiki/AutoCompleteSolutions
i na koniec bardzo uproszczony przykład wbudowany:
models.py
admin.py:
źródło
Właściwie to nie bawiłem się tym, ale znalazłem tę obiecująco wyglądającą bibliotekę, do której odwołuje się gdzie indziej.
Wydaje się, że robi dokładnie to, czego chciałem. Zamiast wczytywać całą listę powiązanych obiektów (niezależnie od tego, ile ich jest!) I prezentować ci selektor do wybrania kilku z nich, tak jak to
filter_horizontal
robi, przedstawia pole wyszukiwania / filtru i używa wywołań typeahead / autocomplete do pobierania wyników dynamicznie. Jest to świetne rozwiązanie w przypadku, gdy masz około 5000 użytkowników i chcesz wybrać 3 lub 4 z nich bez czekania na<option>
pobranie i renderowanie elementów 5k .źródło
To jest stare pytanie, ale chcę tutaj dodać odpowiedź dla osób, które uważają to tak, jak ja: ta sytuacja jest dokładnie tym, do czego służą wbudowani administratorzy Django. W szczególności używam TabularInlines z surowymi polami identyfikatora dla relacji wiele-do-wielu, które mają zbyt wiele możliwości wyboru.
https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.TabularInline
źródło