Cés*_*pia 6 django django-rest-framework
在我的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")
Run Code Online (Sandbox Code Playgroud)
但我真的不喜欢它.我认为这将是一个更加简洁如果该字段email将从串行输出它完全排除show_email是False,反而显示出丑陋的"email": null东西.
我怎么能这样做?
您可以在 API 视图中通过覆盖返回响应的方法(即 API 视图的“动词”)来执行此操作。例如,在 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
Run Code Online (Sandbox Code Playgroud)
您可能想要添加更多的属性检查,但这就是如何完成的要点。另外,我想补充一点,如果消费应用程序希望所有记录中都存在字段,则从某些结果中删除字段可能会导致消费应用程序出现问题。
| 归档时间: |
|
| 查看次数: |
4964 次 |
| 最近记录: |