Django编辑配置文件未保存



我为我的用户(django用户+我的个人资料中有更多信息的用户(预先填写了不想保存的表格。没有错误消息,没有重定向,我按下按钮";编辑";,然后。。。同一页,修改已经写好。但数据库没有改变。

所以,这是代码:

forms.py:

class UpdateUser(forms.ModelForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('email', 'username')
def clean_email(self):
email = self.cleaned_data.get('email')
username = self.cleaned_data.get('username')
if email and User.objects.filter(email=email).exclude(username=username).count():
raise forms.ValidationError('Cette adresse email est déjà utilisée, veuillez en indiquer une autre')
return email

class UpdateProfil(forms.ModelForm):
class Meta:
model = Profil
fields = ("society", "thingA", "thingB", "thingC", "thingD", "thingE")

views.py:

@login_required
def edit_profile(request):
user = User.objects.get(username = request.user)
profile = Profil.objects.get(user = user)
if request.method == 'POST':
form1 = UpdateUser(request.POST, instance=user)
form2 = UpdateProfil(request.POST, instance=profile)
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
return HttpResponseRedirect('Register/view_profile.html')
else:
form1 = UpdateUser(initial={"email": user.email, 
"username": user.username})
form2 = UpdateProfil(initial={"society": profile.society, 
"thingA": profile.thingA, 
"thingB": profile.thingB, 
"thingC": profile.thingC, 
"thingD": profile.thingD, 
"thingE": profile.thingE})
return render(request, 'Register/edit_profile.html', locals())

和模板:

<form action="" method="post">
{% csrf_token %}
<p>Email : </p>{{ form1.email }}
<p>Nom d'utilisateur : </p>{{ form1.username }}
<p>Société (entreprise, association, établissement...") :</p> 
{{ form2.society }}
<p>Si vous êtes membres d'un ou plusieurs centres pilotes, veuillez les cocher ci-dessous :</p> 
<p>thingA : {{form2.thingA }}</p>
<p>thingB : {{form2.thingB }}</p>
<p>thingC : {{form2.thingC }}</p>
<p>thingD : {{form2.thingD }}</p> 
<p>thingE : {{form2.thingE }}</p>

<button type="submit">Editer</button>
</form>

型号.py

class Profil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
deadline = models.DateField(blank=True, null=True,
default=None,
verbose_name="Date limite de validité")
thingA = models.BooleanField(default=False)
thingB = models.BooleanField(default=False)
thingC = models.BooleanField(default=False)
thingD = models.BooleanField(default=False)
thingE = models.BooleanField(default=False)
society = models.CharField(max_length = 255, 
blank=True, null=True,
verbose_name="Société",
help_text="Le nom de votre entreprise, association, établissement...")
def __str__(self):
return "Profil de {0}".format(self.user.username)

在尝试了不同的东西,阅读了关于这个话题的所有内容,但没有找到有效的解决方案后,我试着跳出框框思考:我想也许是因为我没有在表格中输入密码,但它不应该在这里发挥作用,对吧?

那么,也许是权限问题?我试着给两个模特都允许。仍然不起作用。。。

谢谢你抽出时间,也为我的英语错误感到抱歉。。。

所以,我对我的代码进行了一些修改,现在它开始工作了,我不知道为什么,如果有人知道,我会洗耳恭听的!我会把它放在这里,以防它对其他人有帮助。

因此,新视图的代码:

@login_required
def edit_profile(request):
user = User.objects.get(username = request.user)
profile = Profil.objects.get(user = user)
if request.method == 'POST':
form1 = UpdateUser(request.POST, instance=user)
form2 = UpdateProfil(request.POST, instance=profile)
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
return redirect("viewProfile") # Here is the only change I finished with
else:
form1 = UpdateUser(initial={"email": user.email, 
"username": user.username})
form2 = UpdateProfil(initial={"society": profile.society, 
"thingA": profile.thingA, 
"thingB": profile.thingB, 
"thingC": profile.thingC, 
"thingD": profile.thingD, 
"thingE": profile.thingE})
return render(request, 'Register/edit_profile.html', locals())

所以,我想问题出在httpResponseRedirect上,不知道为什么,因为没有错误,也没有保存任何内容,但是。。。我不会当面看礼物!它现在起作用了。2020年突然好多了!直到明天,这就是=P

感谢那些试图帮助我的人!

最新更新