gpt4 book ai didi

django-rest-framework - 如何使用 Serializer() 类 DRF 获取外键值

转载 作者:行者123 更新时间:2023-12-04 09:37:59 31 4
gpt4 key购买 nike

我有模型 UserRole .用户模型有外键 role来自模型 Role如下图所示。
用户模型

class User(model.Model):

first_name = models.CharField(max_length=255, blank=False)
role = models.ForeignKey(Role, on_delete=models.CASCADE, blank=False)
榜样
class Role(models.Model):

role_name = models.CharField(max_length=255, blank=False, unique=True)
我为模型 User 写了一个序列化程序.
class User(serializers.Serializer):

id = serializers.IntegerField(read_only=True)
role = serializers.IntegerField(required=True)
我正在使用 APIView获取所有用户的列表。我要 get() APIVIew的方法到所有用户的返回列表 role_name而不是 role_id像这样 -
[
{
"first_name":"Name",
"role": "Admin"
},
{
"first_name":"Name",
"role": "Merchant"
}
]
View .py
class ListUsers(APIView):

def get(self, request, formate=None):

admin_users = User.objects.all().values('first_name', 'role')


return Response(admin_users)
我的 ListUsers(APIView)类返回这样的列表 -
[
{
"first_name":"Name",
"role":1
},
{
"first_name":"Name",
"role":2
}
]
我希望我的 APIView 返回用户列表,并且每个对象都应该有 role_name而不是 role_id .我不想用 ModelSerializer .另外,我有一个 APIView()为模型创建对象的类 User它使用相同的序列化程序。我想要一个不会影响创建用户功能的解决方案。

最佳答案

首先,您没有使用序列化程序。为了使用你的序列化器,你必须使用 ListAPIView而不是 APIView并设置其 serailizer_class到您已实现的序列化程序并设置其 queryset或实现其 get_queryset .列表列表是由于您的代码将对象嵌套在一个集合中:

    return Response({admin_users})

但至于返回角色名称而不是角色 id 看看 SlugRelatedField这是专门针对您的用例的。

关于django-rest-framework - 如何使用 Serializer() 类 DRF 获取外键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62465728/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com