django-userena删除面部照片

时间:2013-04-13 04:10:42

标签: django django-templates django-views

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

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

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

2 个答案:

答案 0 :(得分:2)

不要直接编辑userena表单,而应将其放在您自己的forms.py文件(例如accounts / forms.py)中,如FAQ中所述,并将url放在userena include上方。下面是一个示例,我使用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上说,使用原始模块视图,但用我自己的表单替换form参数。

答案 1 :(得分:1)

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

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

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

{% for field in form %}
    {% if field.name != 'mugshot' %}
        {{ field }}
    {% endif %}
{% endfor %}