【发布时间】:2018-07-06 22:49:25
【问题描述】:
我有 2 个模型:用户和用户摘要。 UserSummary 有一个 User 的外键。我刚刚注意到,如果我在UserSummarySerializer 中设置depth= 1,密码字段将包含在输出中。它已经过哈希处理,但最好还是排除此字段。
为了隐藏密码字段,我只是在序列化程序中明确设置了用户字段,就像这样:
class UserSerializer(serializers.ModelSerializer):
"""A serializer for our user profile objects."""
class Meta:
model = models.User
extra_kwargs = {'password': {'write_only': True}}
exclude = ('groups', 'last_login', 'is_superuser', 'user_permissions', 'created_at')
def create(self, validated_data):
"""Create and return a new user."""
user = models.User(
email = validated_data['email'],
firstname = validated_data['firstname'],
lastname = validated_data['lastname'],
mobile = validated_data['mobile']
)
user.set_password(validated_data['password'])
user.save()
return user
class UserSummarySerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = models.UserSummary
fields = '__all__'
depth = 1
这种做法的缺点是,在创建新用户时,字段密码在 POST 请求中不再可用。
如何在 UserSummary 的 GET 请求中隐藏 password 字段,但在 User 的 POST 请求中显示?
【问题讨论】:
标签: python django rest django-rest-framework django-serializer