Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I include related fields to the model serialization in django rest framework?

I have two models:

class User(models.Model):
  username = models.CharField()

and

class Post(models.Model):
  text = models.TextField()
  owner = models.ForeignKey(User)

Using such serializer:

from rest_framework.serializers import ModelSerializer

class PostSerializer(ModelSerializer):
    owner = serializers.Field(source='owner.id')

    class Meta:
        model = Post
        fields = ['text', 'owner']

I get all posts with owners' ids. How can I modify serializer to get all posts with owner fialed containing the whole user model?

I tryied from rest_framework.serializers import ModelSerializer

class PostSerializer(ModelSerializer):
    owner = serializers.Field(source='owner')

    class Meta:
        model = Post
        fields = ['text', 'owner']

but that only replaced id with username, not the whole model as I expected(because User's representation returns username field).

like image 452
sbeliakov Avatar asked Dec 30 '25 23:12

sbeliakov


1 Answers

The solution is to define UserSerializer extending ModelSerializer like that

from rest_framework.serializers import ModelSerializer

class UserSerializer(ModelSerializer):

    class Meta:
        model = UserModel
        fields = ['id', 'username']

and then use it in PostSerializer:

from myapp import UserSerializer
from rest_framework.serializers import ModelSerializer

class PostSerializer(ModelSerializer):
    owner = UserSerializer()

    class Meta:
        model = PostModel
        fields = ['id', 'owner']
like image 67
sbeliakov Avatar answered Jan 01 '26 15:01

sbeliakov