在Djang中更新用户对象的变量值

2024-10-17 06:30:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一些功能,允许用户使用Django表单在Django项目中编辑他们的个人信息。当用户在表单中输入新值并点击enter时,它们将返回到主配置文件页面,这是正确的,但是,这些值与以前相同。下面是我如何尝试实现该功能的:

表格

class UpdateProfile(forms.ModelForm):
    email = forms.EmailField(required=False)
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)
    age = forms.IntegerField(required=False)
    height = forms.IntegerField(required=False)
    weight = forms.IntegerField(required=False)

    class Meta:
#Here are the fields that i want editable
        model = User
        fields = ('email', 'first_name', 'last_name', 'age', 'height', 'weight')

#Here im trying to commit the changes to the user and return the user
    def save(self, commit=True):
        super(UpdateProfile, self).__init__(commit)


        if commit:
            user.save()

        return user

视图

def update_profile(request):
    args = {}

    if request.method == 'POST':
        form = UpdateProfile(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('account/profile.html'))

    else:
        form = UpdateProfile()
        args['form'] = form
        return render(request, 'account/edit_profile.html', args)

HTML

% block head %}
    <title>Profile</title>
{% endblock %}

{% block body %}
    <div class="container">
        <form method="POST" action="{% url 'account:profile' %}">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Submit</button>
        </form>
        <br>
    </div>
{% endblock %}

Tags: thenameformfalsereturnrequestsaverequired
2条回答

这句话似乎错了:

super(UpdateProfile, self).__init__(commit)

您正在从父类调用__init__,但是正在调用的方法是save()。。。您还引用了一个user变量,这个变量(希望)没有在这个范围内定义

您的表单将直接提交到“查看配置文件”页面。但该页面可能不希望验证表单。您需要将它提交回update\u profile页面,这通常是通过在form HTML元素中使用一个动作"."来完成的

<form method="POST" action=".">

完成之后,您将看到formsave()方法存在一些问题。不管怎样,这种方法没有任何用处;您应该删除它,并让超类1被自动调用

相关问题 更多 >