通过视图集创建时如何将当前用户添加到多对多字段?

How to add the current user to a many-to-many field when creating via a viewset?

我有一个 Django 项目"workspaces",用户可以属于多个工作区,因此用户和工作区之间存在多对多关系。

现在,到目前为止其他一切工作正常,但是当用户创建该工作区时,我无法将当前用户添加到该工作区的用户列表中。

模型看起来像这样:

class Workspace(models.Model):
    name = models.CharField(max_length=100)
    users = models.ManyToManyField(User, related_name='workspaces')

序列化程序如下所示:

class WorkspaceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Workspace
        fields = ('name', 'users')

最后,观点:

class WorkspaceViewSet(viewsets.ModelViewSet):
    queryset = Workspace.objects.all().order_by('name')
    serializer_class = WorkspaceSerializer
    permission_classes = [permissions.IsAuthenticated,]

所以,详细来说,当用户创建新工作区时,我希望工作区的 users 字段引用该用户。目前,该字段仍为空。我将如何填充该字段,以便在创建时立即将当前用户添加到那里?

你可以覆盖序列化器的create方法class:

class WorkspaceSerializer(serializers.ModelSerializer):
    # ...

    def create(self, validated_data):
        instance = super(WorkspaceSerializer, self).create(validated_data)
        instance.users.add(self.context['request'].user)
        return instance

请注意,您可以通过 context 属性访问序列化程序中的请求。这个是对应view传入的(source).