简体   繁体   中英

How to post list in drf post request via postman

I have a client model that can have multiple numbers like a person can have multiple phone numbers. I want to create a client in my database plus add all of its phone numbers at the same time. just like when a person submits his data in a form.

Right now I testing my API in postman but could submit data when number field is added in serializer, GET request is working but I am struggling with post

models.py

class Client(models.Model):
    name = models.CharField(max_length=32)
    departure = models.DateTimeField(default=None, blank=True)
    arrival = models.DateTimeField(default=None, blank=True)
    price = models.IntegerField(validators=[MinValueValidator(0)])

    def __str__(self):
        return self.name



class Number(models.Model):
    number = models.IntegerField()
    client = models.ForeignKey(Client, on_delete=models.CASCADE, null=True, related_name='number')

serializers.py

class NumberSerializer(serializers.ModelSerializer):
    class Meta:
        model = Number
        fields = ('id', 'number')

class ClientSerializer(serializers.ModelSerializer):
    number = NumberSerializer(many=True)
    class Meta:
        model = Client
        fields = ('id', 'name', 'departure', 'arrival', 'price','number')

views.py

class ClientViewSet(viewsets.ModelViewSet):
    queryset = Client.objects.all()
    serializer_class = ClientSerializer
    authentication_classes = (TokenAuthentication, )
    permission_classes = (IsAuthenticated,)

This is how I am making a post request via postman and getting error

邮递员发布请求参数和错误

在此处输入图片说明 you have to send in json instead of form-data 你必须发送 json 而不是 form-data

I think you need to override the create method to make writable nested serializer :

class NumberSerializer(serializers.ModelSerializer):
    class Meta:
        model = Number
        fields = ('id', 'number')

class ClientSerializer(serializers.ModelSerializer):
    number = NumberSerializer(many=True)
    class Meta:
        model = Client
        fields = ('id', 'name', 'departure', 'arrival', 'price','number')
    
    def create(self, validated_data):
        number_data = validated_data.pop('number')
        number = Number.objects.create(**number_data)
        client = Client.objects.create(number=number, **validated_data)
        return client 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM