You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework中AccessKeys表user_id字段存值为空问题求助

我来帮你搞定这个问题!你的user_id一直为null主要有几个核心问题,咱们一步步修改就能解决:

1. 先修正模型的反向关联名称(可选但推荐)

你当前AccessKeys模型里的related_name='user'会和CustomUser本身的属性冲突,改成access_keys更合理,这样后续你可以通过user.access_keys.all()轻松获取某个用户的所有访问密钥,反向关联逻辑更清晰:

# models.py
class AccessKeys(models.Model):
    # 修改related_name为access_keys,可移除null=True(如果业务要求每个密钥必须属于用户)
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='access_keys')
    access_keys = models.CharField(max_length=400)

    def __str__(self):
        return self.access_keys

2. 修复序列化器的字段定义错误

你原来的user_id字段source='CustomUser'是错误的——source应该指向当前模型(AccessKeys)的字段,而不是关联的模型类名。我们可以让序列化器自动处理用户字段,同时设置为只读(因为用户信息由后端自动填充,不需要前端传入):

# serializers.py
class AccessKeySerializer(serializers.ModelSerializer):
    # 可选:显式定义user_id,关联到user字段的id
    user_id = serializers.PrimaryKeyRelatedField(source='user', read_only=True)
    
    class Meta:
        model = AccessKeys
        fields = ['id', 'user_id', 'access_keys']
        # 或者直接让序列化器处理user字段,设置为只读
        # fields = ['id', 'user', 'access_keys']
        # read_only_fields = ['user']

3. 视图层关键:传递当前登录用户到保存方法

这是导致user_id为null的核心原因!你在调用serializer.save()时,没有把当前登录的用户传递进去。因为视图已经配置了IsAuthenticated权限,request.user就是有效的CustomUser实例,直接传给save方法即可:

# views.py
class AccessKeyView(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated, ]
    queryset = AccessKeys.objects.all()
    serializer_class = AccessKeySerializer

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            # 重点:把当前登录用户传入save方法,自动关联到AccessKeys的user字段
            serializer.save(user=request.user)
            return Response(serializer.data, status=HTTP_201_CREATED)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)

这样修改后,当用户发送POST请求创建access_key时,后端会自动把当前登录用户的信息关联到新创建的AccessKeys记录中,user_id就不会再是null啦!

内容的提问来源于stack exchange,提问作者Meera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:12:47