2

这是我第一次与 Userena 合作,我正在尝试覆盖配置文件编辑表单,这样它就不会显示面部照片或隐私设置。到目前为止,这是我的尝试(来自此页面http://tundebabzy.blogspot.com/2013/04/an-easy-way-to-override-third-party-app.html)。

我使用以下 URL 创建了一个应用程序来拦截'accounts/user/edit'URL:

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)

我可以从这里很好地进入编辑表单,但表单看起来仍然一样。任何人都可以帮忙吗?提前致谢!

4

1 回答 1

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 视图。

于 2013-09-23T15:05:01.383 回答