Django:如何更新用户扩展模型中的特定字段?



我对 Django 比较陌生,并且被困在这个上面。我一直在尝试创建一个网站,用户可以在其中创建他们的帐户,查看他们和其他成员的个人资料页面。

models.py

class UserProfileInfo(models.Model):
"""docstring for ClassName"""
user = models.OneToOneField(User)
status = models.TextField(blank = True)
desc = models.TextField(blank = True)
portfolio_site = models.URLField(blank = True)
profilepic = models.ImageField(blank = True, null = True, upload_to = 'profile_pics') 
def __str__(self):
return self.user.username

forms.py

class UserForm(forms.ModelForm):
password = forms.CharField(widget =  forms.PasswordInput())
class Meta():
model = User
fields = ('username', 'email', 'password')
class UserProfileInfoForm(forms.ModelForm):
class Meta():
model = UserProfileInfo
fields = ('desc', 'portfolio_site', 'status', 'profilepic')

因此,我希望用户能够通过在文本框中键入内容从其主页更新其状态。

index.html(用户可以从中更新其状态的主页(


<form method="POST" action="{% url 'app5:user_status' user.username %}">
{% csrf_token %}
<div class="form-group">
<label for="inputlg"></label>
<input class="form-control input-lg" id="inputlg" type="text" name='status' placeholder="How are you feeling?">
</div><center>
<input type="submit" name='submitbtn' value='Add Status'>
</center>
</form>

以下是我在 views.py 中更新状态的函数的样子:

def user_status(request, username):
if request.method == 'POST':
mystatus = request.POST.get('status')
user = User.objects.get(username=username)
user.userprofileinfo.status = mystatus
user.save()
return redirect('app5:profilepage', username=username)

但是,它不起作用。如果我尝试更新用户模型中的其他字段,例如用户名或电子邮件,而不是UserProfileInfo扩展模型,在这种情况下user.email = mystatus工作。但是当我尝试更新用户配置文件信息模型的状态字段时,更新不会发生。我很确定该行中存在错误:user.userprofileinfo.status= mystatus.我已经搜索了文档和许多其他来源,但无法找到答案。我该怎么做?

任何帮助将不胜感激。谢谢!

编辑:单击"提交"时没有收到任何错误。只是更新没有在模型中进行,状态字段与以前相同。

您保存的是用户,而不是用户配置文件信息对象。这是一个单独的模型,因此需要单独保存。

profile = user.userprofileinfo
profile.status = mystatus
profile.save()

如果你在UserProfileInfo中有更新字段,那么获取UserProfileInfo的对象并更新字段,如下所示

def user_status(request,username):
if request.method == 'POST':
mystatus = request.POST.get('status')
user = User.objects.get(username=username)
userprofileinfo = user.userprofileinfo
userprofileinfo.status = mystatus
userprofileinfo.save()
return redirect('app5:profilepage',username=username)

最新更新