حل ارور Invalid data. Expected a dictionary, but got int.

زمان مطالعه: < 1 دقیقهحل ارور Invalid data. Expected a dictionary, but got int.

زمان مطالعه: < 1 دقیقه

خب مشکل کجاست؟ شما یه سریالایزر دارید، که مدل استفاده شده داخل سریالایزر شما یه کلید خارجی داره، بهنگام آپدیت کردن احتمالا به این مشکل برخوردید،

قدم اول احتمالا سریالایزر رو به صورت 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()
Category: سوالات و مشکلات پایتون
Tags: django, serializer

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *