Reputation: 437
how would i get the user name to show in the serializer along wit the data. I tried doing serializer char field but did not work.
Model
class Pet(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
null=True, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
serializer
class PetSerializer(serializers.ModelSerializer):
class Meta:
model = Pet
fields = '__all__'
view set:
class PetViewSet(viewsets.ModelViewSet):
queryset = Pet.objects.all()
permission_classes = [
permissions.AllowAny
# permissions.IsAuthenticated,
]
serializer_class = PetSerializer
what i tried:
class PetSerializer(serializers.ModelSerializer):
username = serializers.CharField(
source = "users.username", read_only = True
)
class Meta:
model = Pet
fields = '__all__'
expected result:
{
"id": 1,
"title": "dog",
"owner": 1,
"username": "someusername"
},
Upvotes: 0
Views: 4536
Reputation: 1
To get the username instead of user id we can make this happen by a few change in serliazers.py
class ProductSerializer(ModelSerializer):
user=serializers.CharField(source="user.username") # here we will point user.username to get user's name and save it in user
class Meta:
model=Product
fields=['id','user','pname','category','description','price']
Upvotes: 0
Reputation: 1
In serializers.py
class PetSerializer(serializers.ModelSerializer):
owner_username = serializers.SerializerMethodField('get_owner_username')
def get_owner_username(self, model):
return model.owner.username
class Meta:
model = Pet
fields = '__all__'
Upvotes: 0
Reputation: 437
username = serializers.CharField(
source="owner.username", read_only=True)
I needed to get the foreign key, which is owner
, and then put username
in this serializer.
Upvotes: 3
Reputation: 175
class PetSerializer(serializers.ModelSerializer):
def getUsername(self, obj):
return obj.user.username
username = serializers.SerializerMethodField("getUsername")
class Meta:
model = Pet
fields = ('id','username', 'title', 'text', 'created_at', 'update_at')
read_only_fields = ('id',)
Upvotes: 1
Reputation: 2103
You need to add a new field in your serializer by using 'SerializerMethodField'
username = serializers.SerializerMethodField("get_username")
This function will return the username for the serializer:
def get_username(self, obj):
return obj.owner.username
Upvotes: 1