【问题标题】:ModelForm not saving data into the modelModelForm 未将数据保存到模型中
【发布时间】:2016-05-27 14:38:13
【问题描述】:

我查看了所有类似的问题,但似乎都没有帮助。

这是我在class ProfileEditView(generic.DetailView): 中的POST 方法

def post(self, request, *args, **kwargs):
    profile_id = kwargs.get('pk')
    user_detail = User.objects.get(id=profile_id)

    form  = EditProfileForm(request.POST, request.FILES, instance=user_detail)
    if form.is_valid():
        updated = form.save(commit=False)
        updated.phone = form.cleaned_data["phone"]
        updated.address = form.cleaned_data["address"]
        updated.gender = form.cleaned_data["gender"]
        updated.save()
        messages.success(request, "Profile details updated.")
        return redirect("profileview", profile_id)
    else:
        context = {}
        context["form"] = form
        context["profile_id"] = kwargs["pk"]
        return render(request, self.template_name, context)

模板:

<form enctype="multipart/form-data" method="POST" action="{% url 'profile_edit_view' profile_id %}">
{% csrf_token %}

{{form|crispy}}

<input type="submit" value="Save">

</form>

模型.py

class UserDetail(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    profile_picture = models.FileField(upload_to=profile_image_upload, null=True, blank=True)

    phone = models.CharField(max_length=10)
    address = models.CharField(max_length=1000)
    gender = models.CharField(max_length = 10, choices=gender_choices)

【问题讨论】:

  • 我不明白,你为什么要手动从form.cleaned_data中取出所有数据并手动保存?为什么不能直接拨打updated = form.save()
  • 也试过了,还是不行:(
  • @ShangWang 在form = EditProfileForm(request.POST, request.FILES, instance=user_detail) 中有'instance' 属性与这个问题有什么关系?
  • 提交表单时会发生什么?表格有效吗? EditProfileForm 是什么样的?使用UpdateView 可能比使用DetailView 更容易。
  • 好的,still didn't work 一点帮助都没有。你需要告诉我它到底是如何不起作用的。你看到错误了吗?您是否检查了已保存的实例updated

标签: django django-forms django-views


【解决方案1】:

如果EditProfileForm 正在编辑UserDetail,那么instance 应该是UserDetail 实例。您目前正在传递user。尝试将其更改为:

def post(self, request, *args, **kwargs):
    user_id = kwargs.get('pk')
    user_detail = User.objects.get(id=user_id)
    user_detail = user.userdetail

    form  = EditProfileForm(request.POST, request.FILES, instance=user_detail)

【讨论】:

  • 谢谢,我在搞乱User 和'UserDetail'。我用过model = User。无论如何,它现在正在工作。 :)
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2013-08-19
  • 2017-08-12
  • 2020-07-11
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多