Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django在类扩展(admin.ModelAdmin)中使用uuu init_uuuu方法_Django_Python 3.x_Init_Modeladmin - Fatal编程技术网

Django在类扩展(admin.ModelAdmin)中使用uuu init_uuuu方法

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

我对Django相当陌生

我有一个非常典型的
管理模型
扩展类(有
列表显示
搜索字段
,等等)

它看起来像这样:

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
    扩展类中使用初始化方法或某种“生命周期挂钩”
  • 为什么我的构造函数在注册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)
    

    你的问题不清楚。你的init函数是错误的;正如错误所说,您需要使用正确的类型-FooAdmin,而不是Foo。我不确定删除寄存器的比特的相关性;如果没有这些,这个类永远不会被实例化。谢谢。就这样。我确信其他的例子也在使用这个模型。我可能很愚蠢。