【发布时间】:2012-02-24 18:56:08
【问题描述】:
我有以下基类(代码缩短):
class SignupForm(GroupForm):
username = forms.CharField(
label = _("Username"),
max_length = 30,
widget = forms.TextInput()
)
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
if REQUIRED_EMAIL or EMAIL_VERIFICATION or EMAIL_AUTHENTICATION:
self.fields["email"].label = ugettext("Email")
self.fields["email"].required = True
else:
self.fields["email"].label = ugettext("Email (optional)")
self.fields["email"].required = False
def after_signup(self, user, **kwargs):
"""
An extension point for subclasses.
"""
pass
我想做的是像这样覆盖after_signup() 函数和username 字段:
class CompanySignupForm(SignupForm):
#TODO: override fields for company signup form
username = forms.CharField(
label = _("Username TEST"),
max_length = 30,
widget = forms.TextInput()
)
def after_signup(self, user, **kwargs):
"""
An extension point for subclasses.
"""
print str('after_signup is has been overwritten')
我的问题:
只有用户名字段显示所需的行为。 after_signup() 函数永远不会被调用。而是调用基类SignupForm 的after_signup() 函数。我做错了什么?
编辑:
the imports:
from django import forms
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _, ugettext
实例化 CompanySignupForm:
url(r"^signup/$", CompanySignupForm.as_view(), name="acct_signup")
after_signup() 正在从基类中的函数调用:
def save(self, request=None):
# more code here
# ...
self.after_signup(new_user)
【问题讨论】:
-
您能告诉我们您是如何实例化
CompanySignupForm并调用after_signup()的吗? -
导入很好,我没有错误。但在这里它们是:从 django 导入表单从 django.contrib.auth.models 导入用户从 django.utils.translation 导入 ugettext_lazy as _, ugettext
-
实例化 CompanySignupForm: url(r"^signup/$", CompanySignupForm.as_view(), name="acct_signup")
-
after_signup() 正在从基类中的函数调用:def save(self, request=None): self.after_signup(new_user)
-
@JoheGreen:您可以edit您的问题并在此处添加此信息。带有代码的注释很难理解。
标签: python inheritance overriding superclass