@Enter_a_nickname

Django-Rest-Framework POST-запрос к полю ManyToMany, как работает?

Доброго времени суток.
У меня есть 3 модели:
class DogRequest(models.Model):
    id_name=models.PositiveSmallIntegerField()
    Color_data=models.ForeignKey('Color_datas', on_delete=models.CASCADE, blank=True)

class Color_datas(models.Model):
    temp=models.PositiveSmallIntegerField()
    dogs=models.ManyToManyField('dog', blank=True)

class Dog(models.Model):
    name = models.CharField(max_length=50)


Так выглядит мой api:
{"id_name" : 1, 
    "Color_data" : 
        {"temp":320, 
            "dogs": [
                {"name":"sharik"},
                {"name":"bobik"}
        	]
    	}
}

Так выглядит мой serializers:
class DogSerializer(serializers.ModelSerializer):
    name = serializers.CharField(max_length=50)

    class Meta:
        model = Dog
        fields = '__all__'

class Color_datasSerializer(serializers.ModelSerializer):
    temp = serializers.IntegerField()
    dogs= DogSerializer(many=True)

    class Meta:
        model = Color_datas
        fields = '__all__'

class DogRequestSerializer(serializers.ModelSerializer):
    id_name = serializers.IntegerField(max_value=None, min_value=1)
    Color_data= Color_datasSerializer()

    class Meta:
        model=DogRequest
        fields='__all__'

    def create(self, validated_data):
        Color_data_data = validated_data.pop('Color_data')
        dogrequest = DogRequest.objects.create(**validated_data)
        Color_datas.objects.create(dogrequest =dogrequest , **Color_data_data)
        return DogRequest


Мой views:
def dogsApi(request, id=0):
    if 'POST' == request.method:
        dogs_data=JSONParser().parse(request)
        dogs_serializer=DogRequestSerializer(data=dogs_data)
        if dogs_serializer.is_valid():
            dogs_serializer.save()
            return JsonResponse("Добавлено успешно", safe=False)
        return JsonResponse("Не удалось добавить", safe=False)


Нужна ли мне функция create? (можем в ней ошибся)
Почему не работает код? (на возврат получаю "Не удалось добавить")
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler
бекенд-разработчик на python
У Вас сериалайзер не валидный, что буквально означает непустой `.errors`. Посмотрите что там.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы