好的,我知道如何指定哪些字段(在序列化程序中)是read_only或只写这样:
class CustomUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = CustomUser
fields = ('url', 'username','email','password')
write_only_fields = ('password',)
我知道权限类实现允许哪些http方法用于经过身份验证或未经过身份验证的用户请求 .
但是,如果我希望未经过身份验证的用户只能看到“用户名”,但经过身份验证/登录的用户也可以看到电子邮件呢? (例如)
有没有人知道如何以模块化方式编程这样的行为,所以它可以适用于多个模型/序列化?
2 回答
如果您使用
GenericAPIView
或其中的任何一个's subclasses (which is pretty common), you can simply override the serializer' s__init__
仅保留选定的字段:当然,如果您直接调用序列化程序,则需要pass the context yourself .
您最好的选择是拥有两个不同的序列化程序,一个用于经过身份验证的用户,另一个用于未经身份验证的用户 . 然后,您可以通过覆盖get_serializer_class来控制使用哪个序列化程序,以便为请求返回正确的序列化程序 .
您可以使用方法中的
self.request
访问当前请求 .没有简单的模块化方法来执行此操作,因为在不使用单独的序列化程序的情况下确保传入和传出数据仍然安全非常复杂 .