【问题标题】:Access Users from Group model Django从组模型 Django 访问用户
【发布时间】:2021-06-28 05:37:53
【问题描述】:

我正在尝试访问 django 组模型中的用户。

目前我只能通过其他方式访问它,即来自用户模型的组。

我希望能够从 Group 端点执行多项操作:

  • 检索组内的用户并将其返回到视图内
  • 创建组并直接在请求中添加用户
  • 更新组以在其中添加或删除用户

我为权限做了同样的事情,我可以将它们添加到组内,但我不能为用户做这件事,因为组模型内没有用户字段。

为了获得许可,我做了一个序列化程序

我想和 Permissions 字段一样,但是对于用户,有什么办法吗? 我希望覆盖 Group 模型并添加一个字段,以便可以在序列化程序中使用它,但我没有找到如何这样做。

    class GroupSerializer(serializers.ModelSerializer):
        Id = serializers.IntegerField(source='id', required=False)
        Name = serializers.CharField(source='name')
        Permissions = PermissionSerializer(source='permissions', many=True, required=True)
        class Meta:
            model = Group
            fields = ('Id','Name','Permissions',)
        def create(self, validated_data):
            print(validated_data)
            permissions_data = validated_data.pop('permissions')
            permissions = []
            for permission in permissions_data:
                permissions.append(get_object_or_404(Permission.objects.all(), pk=permission['id']))
    
            group = Group.objects.create(**validated_data)
            group.permissions.set(permissions)
    
            return group
    
        def update(self, instance, validated_data):
           
            instance.name = validated_data.get('name', instance.name)
           
            
            if validated_data.get('permissions'):
                permissions_data = validated_data.pop('permissions')
                permissions = []
                for permission in permissions_data:
                    permissions.append(get_object_or_404(Permission.objects.all(), pk=permission['id']))
                instance.permissions.set(permissions)
    
            instance.save()
    
            return instance

【问题讨论】:

    标签: django rest django-models django-rest-framework


    【解决方案1】:

    您可以通过反向外键查找来获取用户组:

    request.user.groups.all()
    # or if you want to see other User's groups
    User.objects.get(<your filter here>).groups.all()
    

    注意末尾的.all():这是因为 user.groups 返回了一个 QuerySet 管理器。

    【讨论】:

    • 此行仅适用于已连接用户,对吗?或者我可以在视图中使用未连接但由管理员更新的用户?我想做的是管理员,他们可以管理用户并从组中添加或删除选定的用户。
    • 连接是什么意思?已注册或登录?
    • 我的意思是正在执行请求的用户,例如 admin1 想要更新 user1。然后 admin1 将请求更新 user1 的组,在这种情况下 request.user 将是 admin1 而不是 user1 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2013-10-15
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多