ModelForm 不将数据保存到数据库中
ModelForm not saving data into database
这是模型
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
profile_pic = ResizedImageField(size=[294, 313], crop=['middle', 'center'], upload_to='profilePicture', null=True, blank=True)
bio = models.CharField(max_length=100, blank=True)
address = models.CharField(max_length=500, blank=True)
mobile_number = models.CharField(max_length=15, blank=True)
def __str__(self):
return str(self.user.first_name)
我在创建用户时使用了 post_save 信号。
这里是 ModelForm
class UserInfo(forms.ModelForm):
class Meta:
model = Profile
fields = ('profile_pic', 'bio', 'address', 'mobile_number')
这里是 views.py 文件:
def updatepersonalinfo(request, slug):
user = get_object_or_404(User, slug=slug)
if request.method == 'POST':
form = UserInfo(request.POST or None, request.FILES or None,instance=user)
if form.is_valid():
form.save()
else:
form = UserInfo(instance=user)
context = {
'form': form,
}
return render (request, 'generaluser/updateinfo.html', context)
这是模板中的表单:
<form method="POST" enctype="multipart/form-data" class="form-contact contact_form">
{% csrf_token %}
<div class="row w-100 ">
<div class="row d-flex justify-content-center">
<div class="col-lg-12">
<div class="section_title text-center mb-55">
<h3><span>Personal Information Update</span></h3>
</div>
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="">About you</label>
<div class="form-group">
{{ form.bio }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="">Your Picture</label>
<div class="form-group">
{{ form.profile_pic }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="org_name">Contact Number</label>
<div class="form-group">
{{ form.mobile_number }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for=""> Your Present Address</label>
<div class="form-group">
{{form.address}}
</div>
</div>
{{ form.errors }}
<div class="col-lg-12 col-sm-12">
<button type="submit" class="button button-contactForm boxed-btn"> submit </button>
</div>
</div>
</form>
提交表单后,没有显示任何错误。 form.is_valid()函数也是pass通过的。但是数据没有保存到数据库中。
我在保存之前也试过commit=False。但这根本不起作用。
这是我的 views.py 文件中的一个愚蠢问题。
我的模型是:
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
profile_pic = ResizedImageField(size=[294, 313], crop=['middle', 'center'], upload_to='profilePicture', null=True, blank=True)
bio = models.CharField(max_length=100, blank=True)
address = models.CharField(max_length=500, blank=True)
mobile_number = models.CharField(max_length=15, blank=True)
def __str__(self):
return str(self.user.first_name)
因此在创建表单时,视图应该是配置文件实例。但不幸的是,我使用了用户实例。
正确的观点是:
def updatepersonalinfo(request, slug):
usr = get_object_or_404(User, slug=slug)
profile = get_object_or_404(Profile, user=usr)
if request.method == 'POST':
form = UserInfo(request.POST or None, request.FILES or None, instance=profile)
if form.is_valid():
f = form.save(commit=False)
f.save()
return redirect('App_Account:profile', slug)
else:
form = UserInfo(instance=profile)
context = {
'form': form,
}
return render (request, 'generaluser/updateinfo.html', context)
我希望这会帮助那些像我一样犯愚蠢错误的人。谢谢。
这是模型
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
profile_pic = ResizedImageField(size=[294, 313], crop=['middle', 'center'], upload_to='profilePicture', null=True, blank=True)
bio = models.CharField(max_length=100, blank=True)
address = models.CharField(max_length=500, blank=True)
mobile_number = models.CharField(max_length=15, blank=True)
def __str__(self):
return str(self.user.first_name)
我在创建用户时使用了 post_save 信号。
这里是 ModelForm
class UserInfo(forms.ModelForm):
class Meta:
model = Profile
fields = ('profile_pic', 'bio', 'address', 'mobile_number')
这里是 views.py 文件:
def updatepersonalinfo(request, slug):
user = get_object_or_404(User, slug=slug)
if request.method == 'POST':
form = UserInfo(request.POST or None, request.FILES or None,instance=user)
if form.is_valid():
form.save()
else:
form = UserInfo(instance=user)
context = {
'form': form,
}
return render (request, 'generaluser/updateinfo.html', context)
这是模板中的表单:
<form method="POST" enctype="multipart/form-data" class="form-contact contact_form">
{% csrf_token %}
<div class="row w-100 ">
<div class="row d-flex justify-content-center">
<div class="col-lg-12">
<div class="section_title text-center mb-55">
<h3><span>Personal Information Update</span></h3>
</div>
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="">About you</label>
<div class="form-group">
{{ form.bio }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="">Your Picture</label>
<div class="form-group">
{{ form.profile_pic }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for="org_name">Contact Number</label>
<div class="form-group">
{{ form.mobile_number }}
</div>
</div>
<div class="col-lg-12 col-sm-12">
<label for=""> Your Present Address</label>
<div class="form-group">
{{form.address}}
</div>
</div>
{{ form.errors }}
<div class="col-lg-12 col-sm-12">
<button type="submit" class="button button-contactForm boxed-btn"> submit </button>
</div>
</div>
</form>
提交表单后,没有显示任何错误。 form.is_valid()函数也是pass通过的。但是数据没有保存到数据库中。
我在保存之前也试过commit=False。但这根本不起作用。
这是我的 views.py 文件中的一个愚蠢问题。
我的模型是:
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
profile_pic = ResizedImageField(size=[294, 313], crop=['middle', 'center'], upload_to='profilePicture', null=True, blank=True)
bio = models.CharField(max_length=100, blank=True)
address = models.CharField(max_length=500, blank=True)
mobile_number = models.CharField(max_length=15, blank=True)
def __str__(self):
return str(self.user.first_name)
因此在创建表单时,视图应该是配置文件实例。但不幸的是,我使用了用户实例。
正确的观点是:
def updatepersonalinfo(request, slug):
usr = get_object_or_404(User, slug=slug)
profile = get_object_or_404(Profile, user=usr)
if request.method == 'POST':
form = UserInfo(request.POST or None, request.FILES or None, instance=profile)
if form.is_valid():
f = form.save(commit=False)
f.save()
return redirect('App_Account:profile', slug)
else:
form = UserInfo(instance=profile)
context = {
'form': form,
}
return render (request, 'generaluser/updateinfo.html', context)
我希望这会帮助那些像我一样犯愚蠢错误的人。谢谢。