我试图让用户更改其个人资料信息,但是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语句中的变量周围加上引号,它告诉我数据库已锁定。
答案 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)。