首页 > 解决方案 > Django - 将带有图像的 JSON 发送到服务器

问题描述

我有一个模型-

class Store(models.Model):
    store_id = models.AutoField(primary_key=True)
    owner = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
    name = models.CharField(max_length=75)
    description = models.TextField(blank=True)
    logo = models.ImageField(upload_to='store/')
    contactNumber = PhoneNumberField(blank=True, help_text='Contact number')
    start = models.TimeField(auto_now=False, auto_now_add=False)
    end = models.TimeField(auto_now=False, auto_now_add=False)
    sundayOpen = models.BooleanField(default=False)
    mondayOpen = models.BooleanField(default=False)
    tuesdayOpen = models.BooleanField(default=False)
    wednesdayOpen = models.BooleanField(default=False)
    thursdayOpen = models.BooleanField(default=False)
    fridayOpen = models.BooleanField(default=False)
    saturdayOpen = models.BooleanField(default=False)

我有一个序列化程序,可以在没有几个字段的情况下获取图像字段(我自己设置 - 商店 ID 和所有者)

 class CreateStoreSerializer(serializers.ModelSerializer):
    class Meta:
        model = Store
        fields = ('name','description','logo','contactNumber',
        'start','end','sundayOpen','mondayOpen','tuesdayOpen','wednesdayOpen',
        'thursdayOpen','fridayOpen','saturdayOpen')

我有一个应该处理请求的视图 - Image + JSON

class StoreDetailView(APIView):
     parser_classes = (MultiPartParser,FormParser, JSONParser)
     permission_classes = (IsAuthenticated,)

     def post(self, request,store_id=None):
        objj = CreateStoreSerializer(data=request.data)
        print(objj.is_valid())
        return Response(status=status.HTTP_200_OK)

objj.errors给了这个信息 -

{
    "name": [ErrorDetail(string="This field is required.", code="required")],
    "logo": [ErrorDetail(string="No file was submitted.", code="required")],
    "start": [ErrorDetail(string="This field is required.", code="required")],
    "end": [ErrorDetail(string="This field is required.", code="required")],
}

序列化程序验证说它无效。我尝试使用 JSON 数据从 Postman 发送请求,但其中的图像字段除外。logo图像字段是使用与我放置 as 的 imageField ( )Content-Type同名的表单数据选择的application/json

但是,序列化程序验证说的是假的。我该如何解决?

标签: djangodjango-rest-framework

解决方案


  • 看来您正在发送Content-Typeas application/json

  • 您应该将内容类型发送为multipart/form-data.

  • 当您发送内容类型时,application/json它不会发送文件。

  • 在邮递员中,您可以像下面那样发送数据multipart/form-data


推荐阅读