2

所有者のみが変更できる場所モデルがあります

class Location(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    address = models.TextField()

これは API ロケーション シリアライザーです

class LocationSerializer(serializers.ModelSerializer):

    class Meta:
        model = Location
        fields = ('user', 'name', 'address',)

問題は、ユーザーをリクエストユーザーにしたいことです

実際にはビューセットのcreateメソッドを上書きしていますが、それは最善の解決策ではないと思います

class LocationViewSet(mixins.CreateModelMixin,
                mixins.RetrieveModelMixin,
                mixins.ListModelMixin,
                GenericViewSet):
    model = Location
    serializer_class = LocationSerializer

    def get_queryset(self):
        return self.model.objects.filter(user=self.request.user)

    def create(self, request, *args, **kwargs):
        data = request.DATA.copy()
        data.update({'user':unicode(self.request.user.id)})

        serializer = self.get_serializer(data=data, files=request.FILES)

        if serializer.is_valid():
            self.pre_save(serializer.object)
            self.object = serializer.save(force_insert=True)
            self.post_save(self.object, created=True)
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED,
                        headers=headers)

            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

提案をありがとう

4

1 に答える 1

0

スニペットとユーザーの関連付けに関するチュートリアルの例を適応させたいとします。get_queryset実装を保持してから、userフィールドを で要求ユーザーに設定しpre_saveます。

于 2013-08-02T09:19:35.377 に答える