Skip to content

Object serializers returning field despite not being present. #9728

Closed
@pstumps

Description

@pstumps

I have this model:

class MatchTimelineEvent(models.Model):
    timeline_event_id = models.AutoField(primary_key=True)
    team = models.CharField(max_length=50, null=True)

    class Meta:
        abstract = True

class ObjectiveEvent(MatchTimelineEvent):
    target = models.CharField(max_length=50)

And I created this serializer for it:

class MatchTimelineEventSerializer(serializers.ModelSerializer):
    class Meta:
        model = MatchTimelineEvent
        fields = '__all__'

class ObjectiveEventSerializer(serializers.ModelSerializer):
    team = serializers.SerializerMethodField()

    class Meta:
        model = ObjectiveEvent
        fields = ['team']

    def get_team(self, instance):
        team = str(instance.team).strip()
        if team == '0' or team == 'Team0':
            return 'Amber'
        elif team == '1' or team == 'Team1':
            return 'Sapphire'
        else:
            return team

Despite me overwriting the way the serializer returns team, this serializer ALWAYS returned null for team. Even upon redefining the serializer field to teamName, the serializer still returns team as null, despite the field not being present anymore.

class ObjectiveEventSerializer(serializers.ModelSerializer):
    teamName = serializers.SerializerMethodField()

    class Meta:
        model = ObjectiveEvent
        fields = ['teamName']

    def get_teamName(self, instance):
        team = str(instance.team).strip()
        if team == '0' or team == 'Team0':
            return 'Amber'
        elif team == '1' or team == 'Team1':
            return 'Sapphire'
        else:
            return team

Serialized:

{
    "teamName": "Sapphire",
    "team": null
},

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions