【问题标题】:Django - Send JSON with Image to ServerDjango - 将带有图像的 JSON 发送到服务器
【发布时间】:2020-06-26 01:45:28
【问题描述】:

我有一个模型-

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')

我有一个应该处理请求的视图 - 图像 + 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 发送请求,但其中的图像字段除外。图像字段选择了与 imageField 同名的 form-data (logo) 我把Content-Type作为application/json

但是,序列化程序验证结果为假。我该如何解决这个问题?

【问题讨论】:

  • 显示您的序列化程序 objj.errors 究竟引发了哪些错误。
  • @VishalSingh 错误 - {'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')]}
  • 将此添加到您的帖子中。

标签: django django-rest-framework


【解决方案1】:
  • 您似乎将Content-Type 发送为application/json

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

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

  • 在邮递员中,您可以按照以下方式将数据发送为multipart/form-data

【讨论】:

  • json 体呢?
  • 将json数据作为表单字段发送
  • 代码呢?我该如何处理呢?我试过了,我认为需要做一些重大的改变
  • 不一样。我不得不改变它
  • 你好像漏掉了什么
猜你喜欢
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2015-04-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多