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)

我希望这会帮助那些像我一样犯愚蠢错误的人。谢谢。