1

我正在构建一个使用 userena 作为个人资料和注册部分的网站。问题是我试图从编辑个人资料页面中删除面部照片上传部分和个人资料隐私(注册、打开、关闭),以便 userena 仅使用 gravatar 并且个人资料对所有人都是公开的。但是在模板中只有

  <fieldset>
  <legend>{% trans "Edit Profile" %}</legend>
  {{ form.as_p }}
   </fieldset>
  <input type="submit" value="{% trans "Save changes" %}" />
  </form>

我正在尝试找出如何编辑此内容或视图以从表单中删除面部照片和隐私,但没有成功。请帮忙?

4

2 回答 2

2

与其直接编辑 userena 表单,不如将其放入您自己的 forms.py 文件(例如,accounts/forms.py)中,如常见问题解答中所述,并将 url 放在 userena 包含的上方。这是一个示例,我使用crispy-forms 对编辑配置文件表单进行子类化,以获得漂亮的引导表单:

帐户/forms.py

class EditProfileFormExtra(EditProfileForm):
    class Meta:
        model = get_profile_model()
        exclude = ['user', 'mugshot', 'privacy', 'my_custom_field']

    def __init__(self, *args, **kwargs):
        super(EditProfileFormExtra, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'edit-profile-form'
        self.helper.form_class = 'form-horizontal'
        self.helper.form_method = 'post'
        self.helper.help_text_inline = True
        self.helper.add_input(Submit('submit', _('Save'), css_class='green'))
        self.helper.layout = Layout(
            Field('first_name', placeholder=_("First Name")),
            Field('last_name', placeholder=_("Last Name")),
            Field('language', css_class="chosen"),
            Field('timezone', css_class="chosen"),
        )

帐户/urls.py

urlpatterns = patterns(
    '',
    url(r'^signup/$', 'userena.views.signup', {'signup_form': SignupFormExtra}, name='signup'),
    url(r'^signin/$', 'userena.views.signin', {'auth_form': SigninFormExtra}, name='signin'),
    url(r'^(?P<username>[\.\w-]+)/edit/$', 'userena.views.profile_edit', {'edit_profile_form': EditProfileFormExtra}, name='edit-profile'),
    url(r'^', include('userena.urls')),
)

正如您在上面的网址中看到的那样,您几乎可以使用任何形式来执行此操作。基本上它在这个 url 上说,使用原始模块视图,但用我自己的表单替换表单参数。

于 2013-08-05T23:24:12.387 回答
1

最好的办法是通过编辑表单本身来删除这两个字段。在 userena 包的 view.py 中,只需通过将“mugshot”和“privacy”添加到排除列表来更改 EditProfileForm:

class EditProfileForm(forms.ModelForm):
...
    class Meta:
        model = get_profile_model()
        exclude = ['user', 'mugshot', 'privacy']

如果您真的只想更改模板,则可以遍历表单而不是使用 form.as_p。在这种情况下,您必须为其他字段参数(如标签、错误、非字段错误等)添加标记 - 请参阅此处的示例。

{% for field in form %}
    {% if field.name != 'mugshot' %}
        {{ field }}
    {% endif %}
{% endfor %}
于 2013-06-10T11:41:53.643 回答