通过视图集创建时如何将当前用户添加到多对多字段?
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).
我有一个 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).