簡體   English   中英

如何通過郵遞員在drf post請求中發布列表

[英]How to post list in drf post request via postman

我有一個客戶端模型,它可以有多個號碼,就像一個人可以有多個電話號碼一樣。 我想在我的數據庫中創建一個客戶端,同時添加它的所有電話號碼。 就像一個人在表單中提交他的數據一樣。

現在我在郵遞員中測試我的 API,但可以在序列化程序中添加數字字段時提交數據,GET 請求正在工作,但我正在為 post 而苦苦掙扎

模型.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')

序列化程序.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')

視圖.py

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

這就是我通過郵遞員發出帖子請求並收到錯誤的方式

郵遞員發布請求參數和錯誤

在此處輸入圖片說明 你必須發送 json 而不是 form-data 你必須發送 json 而不是 form-data

我認為您需要覆蓋create方法以制作可寫的嵌套序列化程序

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM