Python django admin/options.py类型错误:需要2个选项,给定3个
编辑:根据要求,我已在下面发布了完整的回溯信息。 在删除页面模型之前,我需要一些自定义逻辑,因此我重载了delete()方法。(我知道这是一种糟糕的形式。我后来修复了它,但表达我是如何陷入这种混乱的很重要) 比如说:Python django admin/options.py类型错误:需要2个选项,给定3个,python,django,typeerror,Python,Django,Typeerror,编辑:根据要求,我已在下面发布了完整的回溯信息。 在删除页面模型之前,我需要一些自定义逻辑,因此我重载了delete()方法。(我知道这是一种糟糕的形式。我后来修复了它,但表达我是如何陷入这种混乱的很重要) 比如说: def delete(self, *args, **kwargs): # Do some stuff... super(Pages, self).delete() 不幸的是,当我试图通过管理界面删除页面时,这导致了以下类型错误:delete_model()接受2个
def delete(self, *args, **kwargs):
# Do some stuff...
super(Pages, self).delete()
不幸的是,当我试图通过管理界面删除页面时,这导致了以下类型错误:delete_model()接受2个位置参数,但给出了3个位置参数
我决定我需要正确地处理事情,因此我删除了delete方法重载,并通过以下信号处理程序实现了pre_delete逻辑:
@receiver(pre_delete, sender=Pages)
def handle_page_delete(sender, **kwargs):
obj = kwargs['instance']
if(obj != None):
tmp1 = obj.prev_id
tmp2 = obj.next_id
if(tmp1 != None):
tmp1.next_id = tmp2
obj.prev_id = None
if(tmp2 != None):
tmp2.prev_id = tmp1
obj.next_id = None
我遵循最佳实践,将处理程序放入信号子模块,并通过ready()将其注册到apps.py中的重载AppConfig中
不幸的是,我仍然得到了相同的错误:TypeError delete_model()接受2个位置参数,但给出了3个位置参数
然后,我将重载的delete函数重新实现为存根,我想也许我只需要在其中放入适当的选项。因此,我保留了信号逻辑,并简单地将以下内容重新添加到我的页面模型中:
def delete(self, *args, **kwargs):
super(Pages, self).delete(*args, **kwargs)
您会注意到,这次我搜索了文档,并输入了适当的两个*args和**kwargs参数
但我仍然得到相同的类型错误:delete_model()接受2个位置参数,但给出了3个位置参数
最后,我注释掉了所有定制的删除逻辑,只使用了普通的django代码库。我仍然得到相同的错误:delete_model()接受2个位置参数,但给出了3个位置参数
有什么好处?异常位置位于my django安装本身的django/contrib/admin/options.py
中。我以前从来没有安装过任何问题,我认为我不应该认为这是Django本身的问题。我真的认为我是在这里做错了什么,但我有点被困在没有真正的想法从这里走
任何帮助都将不胜感激。谢谢你抽出时间
编辑
根据要求,完整跟踪如下所示:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/webcomics/pages/13/delete/
Django Version: 1.10.5
Python Version: 3.6.0
Installed Applications:
['webcomics.apps.WebcomicsConfig',
'tinymce',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py" in wrapper
544. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py" in inner
211. return view(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python3.6/contextlib.py" in inner
53. return func(*args, **kwds)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py" in delete_view
1718. self.delete_model(request, obj)
Exception Type: TypeError at /admin/webcomics/pages/13/delete/
Exception Value: delete_model() takes 2 positional arguments but 3 were given
各位。所以,是的,我做错了什么。感谢Escher,他建议我查看一下我的admin.py文件。事实证明,有一些重复的重载
delete()。我把复制品处理掉后不久,一切都好了。Jon Clements也是对的。您使用的是什么django版本?在options.py出现错误之前,回溯中是否显示了任何内容?我的意思是-您没有在某个地方的model/(model)admin/similordelete
中命名属性?您可以发布完整的跟踪吗?该错误似乎不是来自此代码。@Escher,完成@schwobaseggl,我使用的是django版本1.10.5@Jon Clements,我本可以一直错过它,但我确实在代码中搜索了多次,以查找丢失的delete
关键字,但没有找到任何关键字:(