在 Django 中返回一个非序列化器字段 otp
returning a non serializer field otp in django
我正在尝试 return otp 到我的响应以及其他序列化程序数据。但由于它不是通过请求提交的,我无法理解如何给予它作为回应。 OTP 与其他数据一起存储在用户 table 中,但我只在 return 中遇到问题作为响应。我的代码如下:
models.py
class User(AbstractUser):
phone_number = models.IntegerField(null=True)
otp = models.IntegerField(null=True)
serializers.py
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
password_confirmation = serializers.CharField(read_only=True)
class Meta:
model = User
fields = ('username', 'password', 'password_confirmation', 'email', 'first_name', 'last_name', 'phone_number')
def create(self, validated_data):
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
instance.otp = randint(1, 98787)
instance.save()
return instance
def otp(self):
instance = self.Meta.model()
return instance.otp
views.py
@api_view(['POST'])
def user_signup(request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
content = {'user': serializer.data, 'otp': UserSerializer.otp()}
return Response(content, status=status.HTTP_201_CREATED)
从 serializer.save()
return 实例开始,您可以执行以下操作:
if serializer.is_valid():
instance = serializer.save()
content = {'user': serializer.data, 'otp': instance .otp}
因此 UserSerializer
中的 def otp(self)
不是必需的。
我正在尝试 return otp 到我的响应以及其他序列化程序数据。但由于它不是通过请求提交的,我无法理解如何给予它作为回应。 OTP 与其他数据一起存储在用户 table 中,但我只在 return 中遇到问题作为响应。我的代码如下:
models.py
class User(AbstractUser):
phone_number = models.IntegerField(null=True)
otp = models.IntegerField(null=True)
serializers.py
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
password_confirmation = serializers.CharField(read_only=True)
class Meta:
model = User
fields = ('username', 'password', 'password_confirmation', 'email', 'first_name', 'last_name', 'phone_number')
def create(self, validated_data):
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
instance.otp = randint(1, 98787)
instance.save()
return instance
def otp(self):
instance = self.Meta.model()
return instance.otp
views.py
@api_view(['POST'])
def user_signup(request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
content = {'user': serializer.data, 'otp': UserSerializer.otp()}
return Response(content, status=status.HTTP_201_CREATED)
从 serializer.save()
return 实例开始,您可以执行以下操作:
if serializer.is_valid():
instance = serializer.save()
content = {'user': serializer.data, 'otp': instance .otp}
因此 UserSerializer
中的 def otp(self)
不是必需的。