Django rest framework: override create() in ModelSerializer passing an extra parameter

前端 未结 2 338
小鲜肉
小鲜肉 2021-01-11 13:31

I am looking for a way to properly ovverride the default .create() method of a ModelSerializer serializer in Django Rest Framework for dealing with

2条回答
  •  难免孤独
    2021-01-11 13:59

    You can now do this in the view set (threw in user as a bonus ;) ):

    class OriginalModelViewSet(viewsets.ModelViewSet):
        """
        API endpoint that allows OriginalModel classes to be viewed or edited.
        """
        serializer_class = OriginalModelSerializer
        queryset =  OriginalModel.objects.all()
        def perform_create(self, serializer):
            user = None
            if self.request and hasattr(self.request, "user"):
                user = self.request.user
            serializer.save(user=user, foo='foo')
    

    That way the Serializer can stay generic, i.e.:

    class OriginalModelSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = OriginalModel
            fields = '__all__'
    

提交回复
热议问题