【问题标题】:Update FielField of an existing model更新现有模型的 FieldField
【发布时间】:2019-12-28 22:55:56
【问题描述】:

我有这个模型

class TravelRequests(models.Model):
mission_order           = models.FileField(blank=True, null=True, upload_to='mission_order')

其中任务订单文件字段不是创建模型所必需的,但它将由另一个用户更新,以便他可以上传文件。 问题是,当我在创建模型时上传文件时,它不会将文件保存在 /media 文件夹中,而在它自己的文件字段中,它只保存文件的名称

这是 ajax 请求:

            var data = new FormData($('.facilities_form').get(0));
            var pk = $(this).val()
            $.ajax({
           type: "POST",
           url: '/approve_facilities/' + pk + '/',
           data: data,
           cache: false,
           processData: false,
           contentType: false,
           success: function(response) {
            if (response == 'request_updated') {

            Swal.fire({
              title: 'The request is approved!',
              type: 'success',
              allowOutsideClick: false,
            }).then((result) => {
          if (result.value) {
            window.location.href='/'
          }
        });
            }
            }
            });

这是处理请求的视图

@login_required
def FacilitiesApproveRequest(request, pk):
    cordinator_comment = request.POST.get('cordinator_comment', '').strip()
    mission_order = request.FILES.get('mission_order')
    request_toApprove = TravelRequests.objects.filter(pk=pk)
    request_toApprove.update(mission_order=mission_order, facilities_approve_case=True,
        facilities_comment=cordinator_comment, facilities_comment_time=timezone.now(),
        request_updater=request.user, request_update=timezone.now(),
        request_status='facility_approve', facilities_aprove=request.user)
    return HttpResponse('request_updated')

这是 html 输入:

<form class="facilities_form" method="post" enctype="multipart/form-data">
<input type="file" name="mission_order" id="id_mission_order" accept=".pdf,.jpeg,.png,.msg">
</form>

当我使用表单更新字段时,我得到了这个

只有没有路径的文件名,当我查看任务订单文件夹时,我没有找到上传的文件。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过分配request_toApprove.mission_order = mission_order,然后显式调用.save()
  • 它有效,谢谢,您介意解释一下为什么它适用于 .save() 方法而不是 .update() 吗??

标签: django python-3.x django-models


【解决方案1】:

您是否尝试过分配request_toApprove.mission_order = mission_order,然后显式调用.save()

可能是这样的:

def FacilitiesApproveRequest(request, pk):
    ...
    mission_order = request.FILES.get('mission_order')
    request_toApprove = TravelRequests.objects.filter(pk=pk)
    request_toApprove.mission_order = mission_order
    request_toApprove.facilities_approve_case = True
    ...
    request_toApprove.save()
    ...

queryset.update() 方法不会调用模型实例的.save() 方法(阅读this doc section 的最后一段),这是正确保存基础文件所必需的。

请参阅answer to a similar questionthis question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多