Reputation: 21
I was tring to keep ckeditor and markdown at same time in a edit/(add new post) in blog web backend, so i modifid __init__
,after that,i can still open edit page .but,once I click save button, this error came out:TypeError: __init__() got multiple values for argument 'instance'
Traceback (most recent call last):
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\contrib\admin\options.py", line 604, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\contrib\admin\sites.py", line 223, in inner
return view(request, *args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\contrib\admin\options.py", line 1640, in change_view
return self.changeform_view(request, object_id, form_url, extra_context)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\contrib\admin\options.py", line 1525, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
File "E:\python_works\project\django\typeidea-env\lib\site-packages\django\contrib\admin\options.py", line 1556, in _changeform_view
form = ModelForm(request.POST, request.FILES, instance=obj)
TypeError: __init__() got multiple values for argument 'instance'
this is the part where once i delete, error won't come out:
class PostAdmin(forms.ModelForm):
....
def __init__(self, instance=None, initial=None, **kwargs):
initial = initial or {}
if instance:
if instance.is_md:
initial['content_md'] = instance.content
else:
initial['content_ck'] = instance.content
super().__init__(instance=instance, initial=initial, **kwargs)
....
Upvotes: 1
Views: 6068
Reputation: 21
I fonud solution here:
Django: multiple values for keyword argument 'initial'
It is a same problem as mine,generally speaking.somehow, the instance
pass todef __init__(self, instance=None, initial=None, **kwargs):
is not receive by instance
,instead it passed to kwargs
(still don't know why),then intance
is default to beNone
,so there are two inastance
parameters,the first instance which is default to be None
,the second instance
is in kwargs
which is the real one i want to pass
so that what i done to fix it:
def __init__(self, *args, **kwargs):
initial = kwargs.get('initial') or {}
instance = kwargs.get('instance')
if instance:
if instance.is_md:
initial['content_md'] = instance.content
else:
initial['content_ck'] = instance.content
kwargs.update({'instance':instance,'initial':initial})
super().__init__(*args,**kwargs)
Upvotes: 1