【问题标题】:Attaching the image in Django Ajax Rest Api在 Django Ajax Rest Api 中附加图像
【发布时间】:2018-02-01 20:56:39
【问题描述】:

当我附加图像时,它在控制台中返回 null 但它继续发布文本数据,我也希望能够包含图像文件。

注意:当我从 Rest api 管理员端上传图像时,它运行良好并且图像显示,这意味着我的 Ajax 图像上传是缺少的

form.html

<form id='userpost-form' class='form' enctype="multipart/form-data" action="" method="POST"  data-filescount=0> {% csrf_token %} 

    {{ form| crispy }}

    <button type="submit" class="btn btn-success btn-sm float-right" id="post_frame">{{ submit_btn }}</button>
</form>

Ajax 改进

$("#userpost-form").submit(function(e) {
  e.preventDefault();
  var this_ = $(this)
  // var formData = this_.serialize()
  // console.log("working...")
  // console.log(this_.serialize())
  var formData = new FormData(this_.serialize());
  formData.append('image', this_.get(0));
  console.log(formData);
  $.ajax({
    url: "/api/posts/create/",
    data: formData,
    method: "POST",
    dataType: "json",
    success: function(data) {
      // console.log(data)
      this_.find("input[type=text], textarea").val("")
      // this_.find("input[type=file]").val("")
      // $('#uploadfrm')[0].reset(); // Reset form data
      attachPosts(data, true)
    },

    error: function(data) {
      console.log("error")
    },
  })

}) //post form end brac

views.py

class PostUserCreateAPIView(generics.CreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostDetailSerializer
    permission_classes = [permissions.IsAuthenticated]
    parser_classes = (MultiPartParser, FormParser,)

    def perform_create(self, serializer):
        serializer.save(content_object=self.request.user, image=self.request.data.get('image'))

serailizers.py

class PostDetailSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ["id", "user", "content", "image", "date_display",
        # "timesince",
    ]

此代码在没有图像的情况下很好地发布了数据,所以我的挑战是如何包含图像文件

【问题讨论】:

  • 请展示你的观点
  • 视图和序列化程序已添加@Bear Brown
  • 我现在已经改进了代码,正如您在 Ajax 改进文件中看到的那样 -
  • 它给出了错误 - Uncaught TypeError: Illegal invocation

标签: jquery ajax django django-forms django-rest-framework


【解决方案1】:

我引用 django 文档:

When Django handles a file upload, the file data ends up placed in request.FILES

不要使用self.request.data.get('image'),而是使用self.request.FILES.get('image')

猜你喜欢
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多