【发布时间】:2020-09-05 15:16:01
【问题描述】:
我已经为我的用户(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>
models.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)
在尝试了不同的事情并阅读了关于该主题的所有内容但没有找到有效的解决方案后,我尝试跳出框框思考:我认为这可能是因为我没有将密码放在表单中,但它应该不会在这里发挥作用吧?
那么,也许是权限问题?我尝试为这两个模型授予权限。还是不行……
感谢您的宝贵时间,并为我的英语错误感到抱歉...
【问题讨论】:
-
将用户添加到数据库或通过 python shell 更改数据库值时会发生什么
-
它工作正常,我可以通过站点或面板管理员添加用户,我可以通过面板管理员进行修改,但不能通过站点
-
当您按下保存时,您会在终端中收到任何错误吗?
-
能否请您发送您的数据库模型,因为这可能是一个问题
-
终端没有错误,按预期保存。我用 de ProfilUser 编辑了我的帖子,对于用户来说,它来自 Django.auth
标签: django django-users