这是我第一次使用Userena,我试图覆盖个人资料编辑表单,因此不会显示照片或隐私设置。这是我到目前为止的尝试(来自此页http://tundebabzy.blogspot.com/2013/04/an-easy-way-to-override-third-party-app.html)。
我使用以下网址创建了一个拦截网址'accounts/user/edit'
的应用:
url(r'^accounts/(?P<username>[\.\w-]+)/edit/$',{'edit_profile_form': CustomEditProfileForm,} ,name='userena_profile_edit')
自定义修改表单:
class CustomEditProfileForm(userena_views.EditProfileForm):
""" Base form used for fields that are always required """
class Meta:
model = get_profile_model()
exclude = ['user', 'mugshot', 'privacy', 'first_name']
自定义视图:
def profile_edit(request, username, edit_profile_form= forms.CustomEditProfileForm,
template_name='userena/profile_form.html', success_url=None,
extra_context=None, **kwargs):
return userena_views.profile_edit(request=request, username=username,
edit_profile_form=edit_profile_form, template_name=template_name,
success_url=success_url, extra_context=extra_context)
我可以从这里获得编辑表格,但表格看起来仍然一样。有人可以帮忙吗?提前谢谢!
答案 0 :(得分:4)
Userena基础表单应该从userena.forms导入,而不是从userena.views导入(也许这只是一个错字):
from userena.forms import EditProfileForm
Meta
类是可以的,但这样你就完全覆盖了它。一般来说,我更喜欢像这样扩展Meta类:
class Meta(EditProfileForm.Meta):
exclude = EditProfileForm.Meta.exclude + ['mugshot', 'privacy', 'first_name']
所以没有必要重复基类正在做的事情,如果在将来的版本中发生变化,风险就会降低。
最后,您不需要创建自定义视图,只需在URL定义中指定自定义表单:
url(r'^accounts/(?P<username>[\.\w-]+)/edit/$',
'userena.views.profile_edit',
{'edit_profile_form': CustomEditProfileForm},
name='userena_profile_edit'),
注意第二行'userena.views.profile_edit'
,引用正常的Userena视图。