Search code examples
djangodjango-rest-frameworkdjango-serializer

Django drf serialiser map non pk field to object


I have Language model like this

class Language(models.Model):
    name = models.CharField()

class Post(models.Model)
    title = models.CharField()
    language = models.ForeignKey(Language, models.SET_DEFAULT, default=1) 

class PostSerializer(serializers.ModelSerializer):
     language = serializers.CharField(source='language.name')

class PostCreateAPIView(generics.ListCreateAPIView):
    serializer_class = serializers.PostSerializer

Post payload

{
 "title":"title_1",
 "language": "en" // instead of primary key
}

I wanted to map language name into object without using pk in payload.


Solution

  • Need to use the SlugRelatedField

    class PostSerializer(serializers.ModelSerializer):
          language = serializers.SlugRelatedField(slug_field='name', queryset=Language.objects.all())