زمان مطالعه: < 1 دقیقهحل ارور Invalid data. Expected a dictionary, but got int.
خب مشکل کجاست؟ شما یه سریالایزر دارید، که مدل استفاده شده داخل سریالایزر شما یه کلید خارجی داره، بهنگام آپدیت کردن احتمالا به این مشکل برخوردید،
قدم اول احتمالا سریالایزر رو به صورت nested ساخته اید و در نتیجه بهنگام آپدیت کردن، فقط id اون کلید خارجی رو قبول نمیکنه و انتظار یه nested dictionary داره، راه حل خیلی ساده است، فقط کافیست یه سریالایزر جدید بسازید و serializers ها رو به دو دسته read و write تبدیل کنید تا به این مشکلات برنخورید.
به مثال زیر توجه کنید:
class HuntingDetailViewSerializer(serializers.ModelSerializer): species = HuntingSpeciesSerializer(many=True, read_only=True) technique = HuntingTechniqueTagSerializer() class Meta: model = HuntListing exclude = ('owner',)
شما سریالایزر بالا را دارید، داخل view نیز کد زیر را دارید:
listing_id = request.data.get('listing_id') listing = HuntListing.objects.get(id=listing_id) serializer = HuntingDetailViewSerializer(listing, data=request.data, partial=True) if serializer.is_valid(): serializer.save()
داده نمونه تون هم به صورت زیر هست :
{"listing_id":9, "technique":1, ....}
ولی ارور دارید به صورت زیر :
Invalid data. Expected a dictionary, but got int.
حل ارور:
فقط کافیست همان طور که گفته شد، serializer های readو write رو از هم جدا کنید، پس سریالایزر جدید داریم :
class HuntingDetailViewSerializer(serializers.ModelSerializer): species = HuntingSpeciesSerializer(many=True, read_only=True) class Meta: model = HuntListing exclude = ('owner',)
همان طور که ملاحظه کردید، خط زیر را حذف کردیم.
technique = HuntingTechniqueTagSerializer()
ارسال پاسخ