Я довольно новичок в Django.
У меня есть admin.Models
расширенный класс, который довольно типичен (имеет list_display
, search_fields
и т. Д.).
Это выглядит примерно такэто:
class FooAdmin(admin.ModelAdmin):
list_display = (
'all',
'my',
'things',
)
...
admin.site.register(Foo, FooAdmin)
Моя проблема в том, что этот ModelAdmin
загружает что-то из модели с чем-то вроде foo_list = Foo.objects.filter(group__name='something')
.
Поскольку это тяжелая задача, я бы хотел выполнитьэто один раз при инициализации, а затем снова и снова использовать одно и то же при указании пользовательских "_field"
функций.
Я думаю сделать это в методе __init__
этого класса, но при реализации моего собственного конструктора он не регистрируется в Django как URL;т. е.
class FooAdmin(admin.ModelAdmin):
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
list_display = (
'all',
'my',
'things',
)
...
# This register portion removed.
# admin.site.register(Foo, FooAdmin)
Вышеуказанное будет "правильно" скомпилировано и запущено, но попытка посетить сайт говорит, что URL не найден (неудивительно, так как я удалил часть регистра).
ОднакоКогда я снова добавляю часть регистра, я получаю сообщение о неправильном использовании моего конструктора, то есть добавление admin.site.register
и выполнение python manage.py runserver ...
приводит к чему-то вроде:
TypeError: super(type, obj): obj must be an instance or subtype of type
У меня естьвзяла этот конструктор из множественных примеров до нет без , поэтому я не уверен, что этоВерсии версий Django или нет.
Мои вопросы:
- Как я могу использовать метод инициализации или что-то вроде «жизненного цикла»в
admin.ModelAdmin
расширенном классе? - Почему реализованный мой конструктор нарушает интерфейс конструкторов при регистрации URL?
Это моя среда:
$ python
Python 3.7.4 (default, Sep 7 2019, 18:29:04)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(2, 2, 5, 'final', 0)