Django rest framework django rest中的API不会更新上次登录

Django rest framework django rest中的API不会更新上次登录,django-rest-framework,Django Rest Framework,我创建了一个简单的端点来创建和更新用户。除了用户通过API登录时不会更新的last_login字段外,它工作正常 我的例子是: 我的网址: router.register(r"user", foo.UserViewSet) 我的序列化程序: class UserSerializer(serializers.ModelSerializer): password=serializers.CharField(write_only=True) def创建(自我验证的_数据): user=user.ob

我创建了一个简单的端点来创建和更新用户。除了用户通过API登录时不会更新的last_login字段外,它工作正常

我的例子是:

我的网址:

router.register(r"user", foo.UserViewSet)
我的序列化程序:

class UserSerializer(serializers.ModelSerializer):
password=serializers.CharField(write_only=True)
def创建(自我验证的_数据):
user=user.objects.create(
用户名=已验证的_数据['username'],
first_name=已验证的_数据['first_name'],
last_name=已验证的_数据['last_name'],
电子邮件=已验证的_数据[“电子邮件”],
last_login=已验证的_数据[“last_login”],
)
user.set_密码(已验证的_数据['password'])
user.save()
返回用户
类元:
模型=用户
排除=(
“团体”,
“用户权限”,
)
我的看法是:

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    pagination_class = StandardPagination
    serializer_class = UserSerializer
    model = User

    def update(self, request, *args, **kwargs):
        user = self.get_object()
        serializer = self.get_serializer(
            user, data=request.data, partial=True
        )
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)
        return Response(serializer.data)
当我与任何用户(在API中)登录时,last_login字段始终为空。由django管理是好的

更新 我在将代码放入UserViewSet时遇到了一些进展和问题:

def执行身份验证(自我、请求):
user=request.user
user.last_login=timezone.now()
user.save()
返回用户

嗯。last_login正在注册,但仅在用户端点和该端点中的每个请求中注册。

根据我自己对该问题的调查,last_login字段与默认的Django身份验证系统(会话身份验证)紧密耦合,这就是为什么在使用Django Admin时会更新此字段的原因,因为管理员使用会话身份验证

在您的情况下,似乎使用了其他类型的身份验证,并且不会触发更新此字段的信号。请参阅下面处理信号的链接:

因此,为了正确地更新此字段,您可能应该手动执行此操作。 下面是关于这个问题的另一个讨论:

你到底想用
User.objects.update(last\u login=request.data[“last\u login”])做什么?
?另外,您是否检查了更新请求中是否发送了
上次登录的值?@sliderIt只是一个尝试。我刚刚编辑了我的问题。