【问题标题】:ModelForm not saving data into databaseModelForm 未将数据保存到数据库中
【发布时间】:2021-06-26 03:42:11
【问题描述】:

这是模型

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 信号。

这里是模型表格

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() 函数也是通过的。但是数据没有保存到数据库中。

在保存之前我也尝试过 commit=False。但这根本行不通。

【问题讨论】:

    标签: django-models django-forms django-templates


    【解决方案1】:

    在我的 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)
    

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

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 1970-01-01
      • 2013-08-19
      • 2023-03-28
      • 2018-07-07
      • 2011-02-19
      • 2020-10-11
      • 1970-01-01
      相关资源
      最近更新 更多