【发布时间】:2014-07-30 08:25:54
【问题描述】:
尝试继承 ModelForm 以创建 BaseForm 以更新模型中的 created_by、modified_by 字段。
我的BaseForm 是
class BaseForm(ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('request', None).user
super(BaseForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
kwargs['commit']=False
obj = super(BaseForm, self).save(*args, **kwargs)
if self.user:
obj.modified_by = self.user.username
obj.save()
return obj
子窗体为
class InviteForm(BaseForm):
class Meta:
model = UserInvitation
我正在通过视图以子形式传递请求
form = InviteForm(instance=instance,request=request)
但它给出了错误
TypeError at /accounts/invitation/
__init__() got an unexpected keyword argument 'request'
如果我不继承BaseForm 并以子形式编写代码,即InviteForm,则错误不存在。
请指出我做错了什么,我不想在每个表单中重复代码。
Traceback:
File "c:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "c:\Python27\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
25. return view_func(request, *args, **kwargs)
File "C:\Python27\Lib\site-packages\django\bin\mysite\userplus\views.py" in invitation
87. form = InviteForm(instance=instance,request=request)
Exception Type: TypeError at /accounts/invitation/
Exception Value: __init__() got an unexpected keyword argument 'request'
【问题讨论】:
-
你能试试
def __init__(self, request=None, *args, **kwargs): if request: self.user = request.user吗? -
你能发布完整的回溯吗?
-
您可以尝试简单地将 kwargs 密钥从
request更改为req吗?可能与这个code.djangoproject.com/ticket/20744有关 -
不,它没有帮助,如果您看到回溯,则错误来自视图 87。form = InviteForm(instance=instance,request=request) 并且仅在继承 ModelForm 时才会影响
标签: django inheritance modelform