Reputation: 175
I have this serializer of a model for Item.
class Item(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=150)
body = models.TextField(blank=True)
image = models.ImageField(upload_to=get_upload_file_name, blank=True)
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'user', 'title', 'body', 'image')
def create(self, validated_data):
item = Item.objects.create(
user=self.validated_data['user'],
title=self.validated_data['title'],
body=self.validated_data['body'],
image=self.validated_data['item_image']
)
return item
And a user serializer.
class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = (
'id', 'email', 'password', 'username', 'first_name', 'last_name',
)
extra_kwargs = {
'password': {'write_only': True},
'id': {'read_only': True}
}
def create(self, validated_data):
user = CustomUser.objects.create(
email=validated_data['email'],
username=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
)
user.set_password(validated_data['password'])
user.save()
return user
However in the ItemSerialzer, for the user field, I want to display the id, first_name and last_name of the user. How can I do this? I am sorry if this is a noob question, I am only a beginner. Thank you.
Upvotes: 2
Views: 1787
Reputation: 1102
You can use source attribute of DRF to traverse the foreign key fields.
class ItemSerializer(serializers.ModelSerializer):
user_id = serializers.CharField(source="user.id")
first_name = serializers.CharField(source="user.first_name")
last_name = serializers.CharField(source="user.last_name")
class Meta:
model = Item
fields = ('id', 'user', 'title', 'body', 'image','user_id', 'first_name', 'last_name')
Upvotes: 5