python - 从序列化程序中的模型获取自动生成的字段,而不返回它
问题描述
我有一个用于邀请新用户的序列化程序。在此序列化程序使用的用户模型中,有一个自动生成的激活密钥字段(通过电子邮件发送给用户)。在序列化程序中干净地获取激活密钥的最佳方法是什么,而不是将它添加到将在响应中返回的 User 对象?出于显而易见的原因,我不希望将激活密钥返回到前端。
模型.py:
class User(AbstractBaseUser):
...
activation_key = models.UUIDField(unique=True, default=uuid.uuid4)
...
序列化程序.py:
class UserInvitationSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = User
fields = ('id', 'email', 'first_name', 'last_name')
def create(self, validated_data):
user = User.objects.create(**validated_data)
random_pass = User.objects.make_random_password(length=10)
user.set_password(random_pass)
user.save()
activation_key = ?
send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])
return user
解决方案
activation_key
是自动生成的。
create()
您已经User
创建了实例,因此您可以从该对象中获取激活密钥:
class UserInvitationSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = User
fields = ('id', 'email', 'first_name', 'last_name')
def create(self, validated_data):
user = User.objects.create(**validated_data)
random_pass = User.objects.make_random_password(length=10)
user.set_password(random_pass)
user.save()
activation_key = user.activation_key
send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])
return user
考虑到您明确指定fields
了ModelSerializer
应该返回的内容,activation_key
不会显示在 API 响应中。
推荐阅读
- c - 创建字符串的链表
- javascript - 为什么它说 .setDescription 不是一个函数?(JavaScript 中的 RichEmbed)
- java - 从字符串中提取逗号分隔值
- terraform - 如何在没有指定提供者的情况下运行 Terraform?
- javascript - jquery ajax 变量值设置为 php 变量
- android - 使用 (StateListDrawable) 与 StateListDrawable
- c# - 导航视图项控件上的自定义图像在运行时不显示
- mysql - 是否有任何工作方法可以将 MySQL 行设置为只读?
- javascript - 使用 jquery 和 $('div').css 放大 div 的高度:转换不起作用
- javascript - 交叉口观察者清理 React 状态?