python - django admin/options.py TypeError: 2 options needed, 3 given -
edit: have posted full traceback below, requested.
i needed custom logic happen before deleting pages model, overloaded delete() method. (i know bad form. fixed later, it's important express how got mess)
with this:
def delete(self, *args, **kwargs): # stuff... super(pages, self).delete()
unfortunately, caused following typeerror when tried delete page via admin interface: delete_model() takes 2 positional arguments 3 given
i decided needed things properly, , deleted delete method overload, , implemented pre_delete logic via following signal handler:
@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
i followed best practices putting handler in signals sub-module , registering via ready() in overloaded appconfig in apps.py.
unfortunately, still got same error: typeerror delete_model() takes 2 positional arguments 3 given
i re-implemented overloaded delete function stub, thinking maybe needed put proper options in. so, kept signals logic around, , added following pages model:
def delete(self, *args, **kwargs): super(pages, self).delete(*args, **kwargs)
you'll note time searched through documentation, , put proper 2 *args, , **kwargs arguments.
but still same typeerror: delete_model() takes 2 positional arguments 3 given
so finally, commented out custom deletion logic whatsoever, , used vanilla django codebase. still same error: delete_model() takes 2 positional arguments 3 given
what gives? exception location inside django installation itself, in django/contrib/admin/options.py
. i've never had problems installation before, , don't think should consider problem django itself. think i'm 1 doing wrong here, i'm kind of stuck no real idea of go here.
any appreciated. thank time.
edit
as requested, full trace follows:
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 @ /admin/webcomics/pages/13/delete/ exception value: delete_model() takes 2 positional arguments 3 given
everyone. so, yes, doing wrong. go out escher, suggested have @ admin.py file. turns out, there duplicate overloaded delete()
, delete_model()
methods had forgotten to, poetically enough, delete. cleared shortly after got rid of duplicates. jon clements right, well.
Comments
Post a Comment