用户无法更新个人资料信息

时间:2019-07-23 12:37:37

标签: django python-3.x sqlite django-forms django-views

我试图让用户更改其个人资料信息,但是form.save()而不是更改现有的个人资料,而是将其另存为同一用户下的新条目。 (例如,bio会说“怎么了”,他们去进行编辑,没有可见的信息被更改,但是另一组信息被放入了我的用户个人资料表。)

我尝试使用SQL命令,它返回有关“ IT”附近错误的信息,该错误不在我的代码中。我试过获取我的user.profile,然后尝试通过它来编辑信息(即user.profile.sex = form.cleaned_data ['sex'])。

我仔细阅读了文档,发现唯一有意义的是Model.save(force_update = True),但是我将其放在我的视图中如何将其链接到用户?

使用我尝试过的SQL查看...

@login_required
def edit_prof(request):
    if request.method == 'POST':
        form = EPIF(request.POST, instance=request.user)

        if form.is_valid():
            user_id = request.user.id
            conn = sqlite3.connect('db.sqlite3')
            cur = conn.cursor()

            sex = form.cleaned_data['sex'] 
            dob = form.cleaned_data['dob']
            r_stat = form.cleaned_data['relationship_stat']
            locale = form.cleaned_data['location']
            bio = form.cleaned_data['bio']
            cur.execute('''
            UPDATE profs_customuserprofile
            SET sex = {}, dob = {}, relationship_stat = {},
            location = {}, bio = {}
             WHERE ID = {};
             '''.format(sex, dob, r_stat, locale, bio, user_id))
            content = form.save(commit=False)
            content.user = request.user
            content.save()
            return redirect('view_prof')
    else:
        form = EPIF()
    return render(request, 'profs/edit_prof.html', {'form': form})

普通视图

@login_required
def edit_prof(request):
    if request.method == 'POST':
        form = EPIF(request.POST, instance=request.user)

        if form.is_valid():
            form.save()
            return redirect('view_prof')
    else:
        form = EPIF()
    return render(request, 'profs/edit_prof.html', {'form': form})

在视图中使用SQL更新语句时,它说'IT'附近有错误。使用上面的视图时,它不更新信息,而只是向用户配置文件表中添加新的集合。 编辑:我在SQL语句中的变量周围加上引号,它告诉我数据库已锁定。

1 个答案:

答案 0 :(得分:0)

正如@WillemVanOlsen所说,我只需要添加

CustomUserProfile.objects.filter(id=user_id).update(sex=sex, dob=dob, relationship_stat=r_stat, location=locale, bio=bio) 

form.save()之前(没有任何SQL)。