Reputation: 2189
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).
Upvotes: 3
Views: 2646
Reputation: 2189
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']
Upvotes: 7