I have models User and Role. User model has foreign key role from model Role as show below.
User Model
class User(model.Model):
first_name = models.CharField(max_length=255, blank=False)
role = models.ForeignKey(Role, on_delete=models.CASCADE, blank=False)
Role Model
class Role(models.Model):
role_name = models.CharField(max_length=255, blank=False, unique=True)
I wrote a serializer for model User.
class User(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
role = serializers.IntegerField(required=True)
I am using APIView to get the list of all the users. I want get() method of APIVIew to a return list of all the user with role_name instead of role_id like this -
[
{
"first_name":"Name",
"role": "Admin"
},
{
"first_name":"Name",
"role": "Merchant"
}
]
views.py
class ListUsers(APIView):
def get(self, request, formate=None):
admin_users = User.objects.all().values('first_name', 'role')
return Response(admin_users)
My ListUsers(APIView) class returns the list like this -
[
{
"first_name":"Name",
"role":1
},
{
"first_name":"Name",
"role":2
}
]
I want my APIView to return list of users and each object should have role_name instead of role_id. I don't want to use ModelSerializer. Also, I have an APIView() class which create an object for model User and it uses the same serializer. I want a solution which would not affect create user functionality.