Search code examples
djangodjango-serializer

'collections.OrderedDict' object has no attribute 'id'


My Models related with foreign key:

class Speaker(models.Model):
    speaker = models.ForeignKey(User, on_delete=models.CASCADE)

class Course(models.Model):
    ...
    author = models.ForeignKey(Speaker, on_delete=models.CASCADE, 
    related_name='course_author')

My serializers:

class SpeakerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Speaker
        fields = ['id',...]

class CourseSerializer(serializers.ModelSerializer):
    ....
    author = SpeakerSerializer(many=False, required=True)
    ....
    class Meta:
        model = Course
        fields = ['id', 'author',...]

    def create(self, validated_data):
        ...
        author = validated_data.get('author')
        ...
        course, _ = Course.objects.create(author=author.id, **validated_data)

        course.save()

I'm sending POST request to this serializer and getting this response: Help please!

course, _ = Course.objects.create(author=author.id, **validated_data)
AttributeError: 'collections.OrderedDict' object has no attribute 'id'

Solution

  • Try:

    author_id = validated_data.pop('author').get('id')
    

    and make sure you send a correct nested JSON API.