Как добавить текущего пользователя в поле «многие ко многим» при создании через набор? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть проект Django, в котором есть «рабочие пространства», и пользователи могут принадлежать к нескольким рабочим областям, поэтому между пользователями и рабочими пространствами существует отношение многих ко многим.

Теперь все остальное работает нормальнопока, но у меня возникают проблемы при добавлении текущего пользователя в список пользователей рабочей области, когда пользователь создает эту рабочую область.

Модель выглядит следующим образом:

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 рабочего пространствассылаться на этого пользователя.В настоящее время это поле остается пустым.Как бы я заполнил поле так, чтобы текущий пользователь был добавлен туда прямо при создании?

1 Ответ

2 голосов
/ 23 сентября 2019

Вы можете переопределить метод create класса сериализатора:

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.Это передается соответствующим представлением ( source ).

...