【问题标题】:In Django-Rest-Framework POST call which updates manytomany field works with JSON but not with form-data在 Django-Rest-Framework POST 调用中更新 manytomany 字段适用于 JSON 但不适用于表单数据
【发布时间】:2020-10-08 19:36:30
【问题描述】:

我想运行一个创建“组”的 POST 调用。假设“人”都将存在。即使不是,错误也不是问题。

class Group(models.Model):
    title = models.CharField(max_length=70)
    persons = models.ManyToManyField(to=Person, blank=True)
    file = models.FileField(upload_to=file_location, null=True, blank=True)

class GroupSerializer(serializers.ModelSerializer):
    persons = serializers.PrimaryKeyRelatedField(many=True, queryset=Person.objects.all())

    class Meta:
        model = Group
        fields = '__all__'

如果我发送 JSON 格式

{
    "title": "Drama Club",
    "persons": [1,2,3]
}

它会起作用的。但由于我无法上传文件,所以我使用 FORM-DATA。

title: Drama Club
persons: [1,2,3]
file: <whatever the format is>

现在问题来了。这是行不通的。它返回此错误

{
    "persons": [
        "Incorrect type. Expected pk value, received str."
    ]
}

即使我删除了其他所有内容,并将persons: [1,2,3] 作为表单数据发送,它也会返回相同的错误。 我真的无法理解这种行为。 (我正在使用 POSTMAN 来检查这个)

【问题讨论】:

    标签: python django-rest-framework request postman multipartform-data


    【解决方案1】:

    原来 form-data 不带数组。所以,而不是 persons : [1,2,3] 我将不得不发送

    persons : 1
    persons : 2
    persons : 3
    

    Django-rest-framework 将完成剩下的工作。 把这个答案放在这里,因为我花了很长时间才弄清楚。


    (如果有办法在表单数据中发送数组,无需在后端进行特殊解析,我很想知道)

    【讨论】:

    • 非常感谢
    【解决方案2】:

    如果您还想上传文件并发送 JSON 有效负载,请查看DRF MultipartParser

    【讨论】:

    • API 已经可以接收 JSON,只要文件不存在。问题是多个“人”不能作为数组发送。
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2021-06-23
    • 2020-06-30
    相关资源
    最近更新 更多