gpt4 book ai didi

django - 动态包含或排除序列化器类字段

转载 作者:行者123 更新时间:2023-12-01 23:44:37 27 4
gpt4 key购买 nike

在我的User个人资料模型中,我明确包含了一个show_email字段。因此,要将此功能添加到我的 API 中,UserSerializer 类如下所示:

class UserSerializer(serializers.ModelSerializer):
email = serializers.SerializerMethodField('show_email')

def show_email(self, user):
return user.email if user.show_email else None

class Meta:
model = django.contrib.auth.get_user_model()
fields = ("username", "first_name", "last_name", "email")

但是我不太喜欢它。我认为如果将字段email从序列化器输出中完全排除,那么它会更清晰,因为show_emailFalse,而不是显示丑陋的"email": null 东西。

我怎样才能做到这一点?

最佳答案

您可以在 API View 中通过覆盖返回响应的方法(即 API View 的“动词”)来执行此操作。例如,在 ListAPIView 中,您将重写 get():

class UserList(generics.ListAPIView):
model = django.contrib.auth.get_user_model()
serializer_class = UserSerializer

def get(self, request, *args, **kwargs):
response = super(UserList, self).get(request, *args, **kwargs)
for result in response.data['results']:
if result['email'] is None:
result.pop('email')
return response

您可能想要添加更多的属性检查,但这就是实现方法的要点。另外,我想补充一点,如果使用应用程序希望所有记录中都存在字段,则从某些结果中删除字段可能会导致消费应用程序出现问题。

关于django - 动态包含或排除序列化器类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812732/

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