类型错误:字段“id”需要一个数字,但得到了 OrderedDict

时间:2021-02-11 18:27:30

标签: python django django-rest-framework

我想发布请求 django rest 但是这个错误。我有两个 Serializer。我想发布一个不通过 id 获取完整数据的请求

Exception Value:    
Field 'id' expected a number but got OrderedDict([('title', 'id:2 Смартфон Samsung Galaxy Note 20 Ultra 256GB Black'), ('price', 2019)]).  



 class ShopSerializer(serializers.ModelSerializer):
        img1 = serializers.SerializerMethodField('get_image_url')
        img2 = serializers.SerializerMethodField('get_image_url')
        img3 = serializers.SerializerMethodField('get_image_url')
        img4 = serializers.SerializerMethodField('get_image_url')
        img5 = serializers.SerializerMethodField('get_image_url')
        img6 = serializers.SerializerMethodField('get_image_url')
        class Meta:
            model = smartphone
            fields = ("id", "img1", "img2", "img3", "img4", "img5", "img6","title","price","slug")
        def get_image_url(self, obj):
            return obj.image.url
        
        
  class OrderCreateSerializer(serializers.ModelSerializer):
        smartphone=ShopSerializer(many=True)
        class Meta:
            model = order
            fields = '__all__'
    
        def create(self, validated_data):
            
            smartphone = validated_data.pop('smartphone')
            question = order.objects.create(**validated_data)
            question.smartphone.set(smartphone)
            return question

怎么解决这个问题怎么解决这个问题怎么解决这个问题怎么解决这个问题

观看次数

class OrderCreateView(generics.CreateAPIView):
    queryset = order.objects.all()
    serializer_class = OrderCreateSerializer

2 个答案:

答案 0 :(得分:1)

请尝试以下发布请求:

{
    "smartphone": [{
        "id": 2,
        "img1": "/media/photos/498f6387e90cfee88f98c4379b0d2057ec3623ee_228615_1_qhhauLD.jpg",
        "img2": "/media/photos/aaf2ece82f9b4d357c78c3bac9eb61e4b6a5dc0e_228615_3_K7RDb8Z.jpg",
        "img3": "/media/photos/00d7a263681301aa35d9dad51cf7d0859965bc5c_228615_2_jBLEZqi.jpg",
        "img4": "/media/photos/498f6387e90cfee88f98c4379b0d2057ec3623ee_228615_1_M9GV72N.jpg",
        "img5": "/media/photos/fe49e462ef4847ac6296d4bba6cd4ab35d374daf_228615_5_CgYDohH.jpg",
        "img6": "/media/photos/b036713f6015464a366dbc1890f0b66041015f64_227736_1_1yAxj5T.jpg",
        "price": 2019,

        "slug": "id2-samsung-galaxy-note-20-ultra-256gb-black",
        "title": "id:2 Смартфон Samsung Galaxy Note 20 Ultra 256GB Black"
    }],
    "orderCustomer": 6,
    "orderAddress": 5
}

更新:

还要确保此行按预期工作 question.smartphone.set(smartphone)

smartphones = validated_data.pop('smartphone')
smartphone_models = []
for sm in smartphones:
    print("value of sm is: {}".format(sm))
    print("type of sm is: {}".format(type(sm)))
    new_smartphone = smartphone.objects.create(sm)
    new_smartphone.save()
    smartphone_models.append(new_smartphone)
question = order.objects.create(**validated_data)
print(smartphone_models)
question.smartphone.set(smartphone_models)

答案 1 :(得分:0)

{
    "smartphone": [
"id": 2
"img1": "/media/photos/498f6387e90cfee88f98c4379b0d2057ec3623ee_228615_1_qhhauLD.jpg"
"img2": "/media/photos/aaf2ece82f9b4d357c78c3bac9eb61e4b6a5dc0e_228615_3_K7RDb8Z.jpg"
"img3": "/media/photos/00d7a263681301aa35d9dad51cf7d0859965bc5c_228615_2_jBLEZqi.jpg"
"img4": "/media/photos/498f6387e90cfee88f98c4379b0d2057ec3623ee_228615_1_M9GV72N.jpg"
"img5": "/media/photos/fe49e462ef4847ac6296d4bba6cd4ab35d374daf_228615_5_CgYDohH.jpg"
"img6": "/media/photos/b036713f6015464a366dbc1890f0b66041015f64_227736_1_1yAxj5T.jpg"
"price": 2019

"slug": "id2-samsung-galaxy-note-20-ultra-256gb-black"
"title": "id:2 Смартфон Samsung Galaxy Note 20 Ultra 256GB Black"
],
    "orderCustomer": 6,
    "orderAddress": 5
}

我的帖子请求看起来像这样