如何在 Django 中使用序列化程序 return 自定义非模型值?

How to return a custom, non model value with serializer in Django?

我想 return 来自我的序列化程序的自定义值。我正在为用户获取身份验证令牌,并希望将它们 return 作为注册过程的一部分。目前我正在 returning 用户对象,但我不知道如何将标记添加到 return 对象中,因为标记不是我的用户模型的一部分。这是序列化程序:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        exclude = ['password', 'is_active', 'staff', 'admin', 'last_login']

    def create(self, validated_data):

        userName= validated_data['userName']
        id= validated_data['id']
        dateOfBirth = validated_data['dateOfBirth']
        gender = validated_data['gender']
        height = validated_data['height']
        weight = validated_data['weight']

        user = User(userName=userName, id=id, dateOfBirth=dateOfBirth, gender=gender, height=height, weight=weight)
        user.set_password("")
        user.save()

        try:
            jwt_token = get_tokens_for_user(user)
        except User.DoesNotExist:
            raise serializers.ValidationError(
                'User does not exists'
            )
 
        return user

userName、id、dateOfBirth、height 和 weight 是我的用户模型中的字段。现在我还想 return create 中的 jwt_token 在我的 views.py 中使用的方法,是否可以在不编辑的情况下将其添加到用户对象模特?

您可以 return 包含 userjwt_token 的元组,如下所示:

return (user, jwt_token)

以及 views.py 中的类似内容:

instance, token = serializer.save()

但是如果您使用任何预定义的 Veiwset 或 Mixins 当您将此序列化程序传递给它们时请小心

希望对您有所帮助。

您可以尝试这样的操作:

try:
  jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
  raise serializers.ValidationError(
    'User does not exists'
  )

created_data = {
  'token_access': jwt_token, # note that jwt_token is dict
  'user': UserSerializer(user).data,
}
return created_data

但老实说,我建议您不要混合使用用户和令牌逻辑并将此部分移至视图部分:

try:
   jwt_token = get_tokens_for_user(user)
except User.DoesNotExist:
   raise serializers.ValidationError(
     'User does not exists'
   )

然后在Response

中写入token和user