2017-08-24 99 views
0

當我附加圖像時,它在控制檯中返回null,但它繼續發佈文本數據,我希望能夠包含圖像文件。在Django Ajax Rest Api中附加圖像

注意:當我從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> 

阿賈克斯

$("#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", 
    ] 

本準則的帖子中的數據非常良好,沒有圖像,所以我的挑戰是如何包括圖像文件

+0

請顯示您的看法 –

+0

10 views and seria lizers添加了@ Bear Brown – dungu

+0

您是否閱讀過這個問題https://stackoverflow.com/questions/32386641/django-rest-framework-upload-file-via-ajax –

回答