作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的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_email
是False
,而不是显示丑陋的"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/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!