我正在使用Django Rest创建一个简单的API.我需要创建一个用户可以更改他/她的密码的视图.我使用默认的Django用户模型和一个简单的UserSerializer.有方法被调用,set_password但我无法找到一种方法与用户seriliazer正确使用它.我无法在任何地方找到任何解决方案.
UserSelializer:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', "username", 'email', 'first_name', 'last_name', 'password')
Run Code Online (Sandbox Code Playgroud)
View(ClassedBased):这是一个例子(我不知道我在这做什么):
class UserChangePassword(APIView):
def patch(self, request):
user = self.request.user
serialized = UserSerializer(data=request.DATA)
if serialized.is_valid():
user.set_password(serialized.data['password'])
user.save()
return Response(status=status.HTTP_205_RESET_CONTENT)
else:
return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
请注意,我想发布一个json脚本来更改为密码.像这样的东西:
{
"old_password": "123",
"new_password": "12345"
}
Run Code Online (Sandbox Code Playgroud) 我无法找到一种方法来自动填充我的模型的字段所有者.我正在使用DRF.如果我使用ForeignKey,用户可以从下拉框中选择所有者,但没有任何意义.PLZ HELP我不能使它工作.views.py不包括因为我认为它没有任何关系.
models.py
class Note(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
cr_date = models.DateTimeField(auto_now_add=True)
owner = models.CharField(max_length=100)
# also tried:
# owner = models.ForeignKey(User, related_name='entries')
class Meta:
ordering = ('-cr_date',)
def __unicode__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', "username", 'first_name', 'last_name', )
class NoteSerializer(serializers.ModelSerializer):
owner = request.user.id <--- wrong , but is what a need.
# also tried :
# owner = UserSerializer(required=True)
class Meta:
model = Note
fields = ('title', 'body' )
Run Code Online (Sandbox Code Playgroud)