【发布时间】:2019-04-14 04:25:12
【问题描述】:
我正在尝试通过 DRF 验证表单,但它需要用户输入密码以进行确认。我似乎无法让它工作。这是我当前的视图和序列化器。它用于“更改电子邮件”表单,需要两个字段,电子邮件和用户密码。这是一个单独的电子邮件模型。序列化器:
class UpdateEmailAddressSerializer(serializers.ModelSerializer):
class Meta:
model = EmailAddress
fields = ('email',)
还有 APIView:
class UpdateEmailAPI(APIView):
permission_classes = (IsAuthenticated,)
serializer_class = UpdateEmailAddressSerializer
def post(self, request, user, format=None):
user = User.objects.get(username=user)
serializer = UpdateEmailAddressSerializer(data=request.data, instance=user)
if serializer.is_valid():
## logic to check and send email
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我不确定在哪里放置密码或如何处理它。它来自用户模型本身。当我尝试向 UpdateEmail 序列化程序中的字段添加密码时,它最终以纯文本更新用户密码并使该用户对象无法使用该密码。
我只想检查用户的密码以确认此表单。有没有明显的方法可以做到这一点?
编辑
当我尝试将“密码”带入序列化程序时,错误提示“字段名称 password 对模型 EmailAddress 无效。”因此,当我尝试将其引入时,例如
password = serializers.CharField(required=True)
或尝试:
## UserPasswordSerializer
class UserPasswordSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
'password',
)
## In UpdateEmailAddressSerializer
password = UserPasswordSerializer()
在 DRF 上提交表单时出现此错误:
尝试获取字段值时出现 AttributeError
password在序列化程序UpdateEmailAddressSerializer上。这 序列化器字段可能命名不正确并且不匹配任何EmailAddress实例上的属性或键。原始异常 文本是:“EmailAddress”对象没有属性“密码”
所以它似乎告诉我密码不是正确的电子邮件地址模型的一部分。但我不知道如何简单地检查表单帖子旁边的密码而不使其成为电子邮件地址的一部分。
【问题讨论】:
-
我已经检查了该答案,但它用于注册并且仅用于用户模型。我无法从用户模型中获取密码字段以在完全独立的模型上运行。
标签: django django-rest-framework