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

基于当前用户ID查询家庭成员的Django REST Framework实现求助

实现当前用户的家庭成员查询功能

我来帮你搞定这个需求,咱们一步步调整代码,确保只有当前登录用户能查询到自己的家庭成员,同时修复现有代码里的小问题。

1. 修正Family模型的外键配置

首先,Django 3.0+ 要求外键必须指定 on_delete 参数,另外加上 related_name 可以方便后续反向查询用户的家庭成员,修改后的Family模型如下:

class Family(models.Model):
    # 添加on_delete和related_name,确保外键关联逻辑正确
    userId = models.ForeignKey(MyUser, on_delete=models.CASCADE, related_name='family_members')
    relationship = models.CharField(max_length=100)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    gender = models.CharField(max_length=6, blank=True, null=True)

2. 调整Family序列化器(可选优化)

如果希望用户创建家庭成员时不需要手动传入userId(由系统自动关联当前用户),可以把userId设为只读字段:

class FamilySerializer(serializers.ModelSerializer):
    class Meta:
        model = Family
        fields = ('id', 'userId', 'first_name', 'last_name', 'gender', 'relationship')
        read_only_fields = ('userId',)  # 标记为只读,创建时由系统自动赋值

3. 重构FamilyViewSet核心逻辑

这是实现需求的关键,我们需要:

  • 限制只有登录用户能访问自己的家庭成员
  • 重写查询集,只返回当前用户的家庭成员
  • 创建家庭成员时自动关联当前用户

修改后的FamilyViewSet代码:

from rest_framework.permissions import IsAuthenticated

class FamilyViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticated]  # 仅允许登录用户访问
    serializer_class = FamilySerializer

    def get_queryset(self):
        # 过滤出当前登录用户的所有家庭成员
        return Family.objects.filter(userId=self.request.user)
    
    def perform_create(self, serializer):
        # 创建时自动将当前用户绑定到Family记录的userId字段
        serializer.save(userId=self.request.user)

为什么要删掉原来的代码?

你原来的FamilyViewSet里的get_object和perform_update存在逻辑问题:

  • get_object返回self.request.user不符合设计逻辑,这个方法本来是用来获取单个Family实例的
  • perform_update里的CurrentFamilyView未定义,而且激活邮件的逻辑是针对用户模型的,和家庭成员无关,所以直接删掉这些错误代码即可。

测试效果

现在当用户登录后,请求Family的列表接口(比如/api/family/),就只会返回该用户添加的所有家庭成员;创建家庭成员时,系统会自动把当前用户作为userId关联进去,不需要手动传参。

内容的提问来源于stack exchange,提问作者Jin Nii Sama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:10