Django在类扩展(admin.ModelAdmin)中使用uuu init_uuuu方法
我对Django相当陌生 我有一个非常典型的Django在类扩展(admin.ModelAdmin)中使用uuu init_uuuu方法,django,python-3.x,init,modeladmin,Django,Python 3.x,Init,Modeladmin,我对Django相当陌生 我有一个非常典型的管理模型扩展类(有列表显示,搜索字段,等等) 它看起来像这样: class FooAdmin(admin.ModelAdmin): list_display = ( 'all', 'my', 'things', ) ... admin.site.register(Foo, FooAdmin) 我的问题是,这个ModelAdmin使用foo\u list=foo.objects.f
管理模型
扩展类(有列表显示
,搜索字段
,等等)
它看起来像这样:
class FooAdmin(admin.ModelAdmin):
list_display = (
'all',
'my',
'things',
)
...
admin.site.register(Foo, FooAdmin)
我的问题是,这个ModelAdmin
使用foo\u list=foo.objects.filter(group\uu name='something')
从模型加载一些东西
由于这是一项繁重的任务,我希望在初始化时执行一次,然后在指定自定义“\u field”
函数时反复使用相同的操作
我的想法是在这个类的\uuuu init\uuuu
方法中实现这一点,但是当实现我自己的构造函数时,它不会作为url注册到Django;i、 e
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未找到(这并不奇怪,因为我删除了注册部分)
但是,当我重新添加register部分时,会收到一条关于我的构造函数被误用的消息,即重新添加admin.site.register
并运行python manage.py runserver…
结果如下:
TypeError: super(type, obj): obj must be an instance or subtype of type
我从中获取了这个构造函数,所以我不确定这是否是Django版本控制
我的问题是:
admin.ModelAdmin
扩展类中使用初始化方法或某种“生命周期挂钩”$ 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)
你的问题不清楚。你的init函数是错误的;正如错误所说,您需要使用正确的类型-FooAdmin,而不是Foo。我不确定删除寄存器的比特的相关性;如果没有这些,这个类永远不会被实例化。谢谢。就这样。我确信其他的例子也在使用这个模型。我可能很愚蠢。