В вызове POST Django -Rest-Framework, который обновляет поле manytomany, работает с JSON, но не с данными формы - PullRequest
1 голос
/ 18 июня 2020

Я хочу выполнить вызов 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, чтобы проверить это)

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Если вы хотите загрузить файл и отправить полезную нагрузку JSON, взгляните на DRF MultipartParser

0 голосов
/ 19 июня 2020

Получается, что данные формы не принимают массив. Итак, вместо persons : [1,2,3] мне нужно будет отправить

persons : 1
persons : 2
persons : 3

Django -rest-framework сделает все остальное. Помещаю этот ответ здесь, потому что мне потребовалось очень много времени, чтобы понять это.


(если есть способ отправить массив в виде данных, без специального синтаксического анализа на бэкэнде, я хотел бы знать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...