我想发布请求 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
答案 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
}
我的帖子请求看起来像这样