Good day SO.
I saw dozens of SO answer about this but it is not working for me. Please point me on the right direction.
With this model:
class Major(models.Model):
major_name = models.CharField(max_length=100, default='', null=False)
is_active = models.BooleanField(default=True, null=False)
def __str__(self):
return self.major_name
class Minor(models.Model):
major = models.ForeignKey("Major", on_delete=models.CASCADE)
minor_name = models.CharField(max_length=100, default='', null=False)
def __str__(self):
return self.minor_name
I should use this serializer to get the major name in my minor serializer:
class MinorSerializer(serializers.ModelSerializer):
major_name = serializers.CharField(source='major.major_name', read_only=True)
class Meta:
model = Minor
fields = ["id", "minor_name", "major_id", "major_name"]
But major_name
is not displayed on my json response.
I also tried to Serialize Major first then call it on my minor:
class MajorSerializer(serializers.ModelSerializer):
class Meta:
model = Major
fields = ["id", "major_name"]
class MinorSerializer(serializers.ModelSerializer):
major_name = MajorSerializer()
class Meta:
model = Minor
fields = ["id", "minor_name", "major_id", "major_name"]
But I got this error message instead "Got KeyError when attempting to get a value for field major_name on serializer MinorSerializer. \nThe serializer field might be named incorrectly and not match any attribute or key on the dict instance.\nOriginal exception text was: 'major_name'."
Note. The same error message if I remove read_only = True on my first answer
Additional Note:
I Tried this, and it gives me the same error message above.
class MinorSerializer(serializers.ModelSerializer):
class Meta:
model = Minor
fields = "__all__"