自定义Django表单不保存

时间:2013-10-15 19:32:57

标签: python django forms save updating

我正在尝试使用this method自定义表单的输出。例如:

<div class="fieldWrapper">
    {{ form.message.errors }}
    <label for="id_message">Your message:</label>
    {{ form.message }}
</div>

如果我将表单呈现为form.as_p,一切正常,但单独渲染字段不起作用。

我有一些我想隐藏的字段,所以我试图单独渲染每个字段。我试图隐藏的字段在模型类中被赋予null=True, blank=True个属性,因此不是必需的。

没有显示错误,而是刷新页面并且不更新数据。鉴于这些因素,我不确定自己能错过什么。以下是观点:

视图来自userena

@secure_required
@permission_required_or_403('change_profile', (get_profile_model(), 'user__username', 'username'))
def profile_edit(request, username, edit_profile_form=EditProfileForm,
                 template_name='userena/profile_form.html', success_url=None,
                 extra_context=None, **kwargs):
"""
Edit profile.

Edits a profile selected by the supplied username. First checks
permissions if the user is allowed to edit this profile, if denied will
show a 404. When the profile is successfully edited will redirect to
``success_url``.

:param username:
Username of the user which profile should be edited.

:param edit_profile_form:

Form that is used to edit the profile. The :func:`EditProfileForm.save`
method of this form will be called when the form
:func:`EditProfileForm.is_valid`. Defaults to :class:`EditProfileForm`
from userena.

:param template_name:
String of the template that is used to render this view. Defaults to
``userena/edit_profile_form.html``.

:param success_url:
Named URL which will be passed on to a django ``reverse`` function after
the form is successfully saved. Defaults to the ``userena_detail`` url.

:param extra_context:
Dictionary containing variables that are passed on to the
``template_name`` template. ``form`` key will always be the form used
to edit the profile, and the ``profile`` key is always the edited
profile.

**Context**

``form``
Form that is used to alter the profile.

``profile``
Instance of the ``Profile`` that is edited.
"""
    user = get_object_or_404(get_user_model(),
                             username__iexact=username)

    profile = user.get_profile()

    user_initial = {'first_name': user.first_name,
                    'last_name': user.last_name}

    form = edit_profile_form(instance=profile, initial=user_initial)

    if request.method == 'POST':
        form = edit_profile_form(request.POST, request.FILES, instance=profile,
                                 initial=user_initial)

        if form.is_valid():
            profile = form.save()

            if userena_settings.USERENA_USE_MESSAGES:
                messages.success(request, _('Your profile has been updated.'),
                                 fail_silently=True)

            if success_url:
                # Send a signal that the profile has changed
                userena_signals.profile_change.send(sender=None,
                                                    user=user)
                redirect_to = success_url
            else: redirect_to = reverse('userena_profile_detail', kwargs={'username': username})
            return redirect(redirect_to)

    if not extra_context: extra_context = dict()
    extra_context['form'] = form
    extra_context['profile'] = profile
    return ExtraContextTemplateView.as_view(template_name=template_name,
                                            extra_context=extra_context)(request)

我使用html来使用{% include 'my-template.html' %}呈现表单。什么可能阻止我更新配置文件对象?谢谢你的任何想法!

1 个答案:

答案 0 :(得分:0)

尝试添加


{{ form.errors }}

在模板的某处,查看是否存在任何非字段错误!