0

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__"
Ivan Starostin
  • 8,798
  • 5
  • 21
  • 39
rod james
  • 369
  • 3
  • 13
  • Does this answer your question? [Retrieving a Foreign Key value with django-rest-framework serializers](https://stackoverflow.com/questions/17280007/retrieving-a-foreign-key-value-with-django-rest-framework-serializers) – Ivan Starostin Mar 08 '21 at 07:18
  • In your case `source='major'`, not `major.major_name` – Ivan Starostin Mar 08 '21 at 07:19

0 Answers0