Stworzyłem niestandardowego menedżera dla modelu Django, który zwraca QuerySet trzymający podzbiór objects.all(). Potrzebuję tego jako domyślnego menedżera modelu, ponieważ tworzę także niestandardowy znacznik, który pobierze zawartość z dowolnego modelu (określonego przez argument) i musi użyć domyślnego menedżera dla określonego modelu. Wszystko to działa dobrze, z wyjątkiem - Django Admin również używa domyślnego Menedżera dla tego konkretnego modelu, co oznacza, że nie wszystkie wystąpienia modelu pojawiają się w admin.Django - określ, który menedżer modelu Django admin powinien używać
Docs Django nie pomagają:
Jeśli używasz niestandardowych obiektów menedżera, wziąć pod uwagę, że pierwszy napotyka Menedżer Django (w kolejności, w jakiej są one zdefiniowane w modelu) ma specjalny status. Django interpretuje tego pierwszego menedżera zdefiniowanego w klasie jako "domyślnego" menedżera, a kilka części Django (, ale nie aplikacja administratora) użyje tego menedżera wyłącznie dla tego modelu. (Django Managers documentation)
Administrator nie ma użyć domyślnego menedżera, ale wydaje się, że w moim przypadku. Zauważ, że mam również wyraźnie dodać domyślny Menedżer objects
:
subset = CustomManager() # the default manager
objects = models.Manager() # the one I want admin to use
Jak mogę określić, które Menedżer administrator powinien używać?
Byłem też nogę przez sekcję podświetlonego w docs administratora. Jest to jeden z nielicznych przypadków, w których uważam, że dokumenty django są niejednoznaczne. – Alasdair
Dziwne. Patrząc na najnowsze źródło Django, wygląda na to, że admin _does_ używa domyślnego menedżera. –
@Michael admin użył domyślnego menedżera od przynajmniej Django 1.0. Kwestią tutaj jest raczej błąd w dokumentacji, który został naprawiony https://github.com/django/django/commit/f7814cdfe6c3b6d87bb8afdcc5c27ee2e92a6a62#docs/topics/db/managers.txt –