Django rest framework DRF文档-动态获取序列化程序

Django rest framework DRF文档-动态获取序列化程序,django-rest-framework,documentation,Django Rest Framework,Documentation,我有一个viewset,它为不同的HTTP方法甚至可能为不同的用户使用不同的序列化程序。DRF文件说: To be compatible with this behaviour methods (such as get_serializer or get_serializer_class etc.) which inspect self.request or, particularly, self.request.user may need to be adjusted to handle t

我有一个viewset,它为不同的HTTP方法甚至可能为不同的用户使用不同的序列化程序。DRF文件说:

To be compatible with this behaviour methods (such as get_serializer or
get_serializer_class etc.) which inspect self.request or, particularly, 
self.request.user may need to be adjusted to handle this case.
有谁能给我举一个调整的例子来处理这个案子吗

假设我有一个视图集,它使用序列化程序a为管理员获取方法,序列化程序B为所有其他用户获取方法,序列化程序C为所有其他方法。如何指定这一点,以便文档理解这一点?我用的是内置的

My URL.py:

最小示例 models.py

序列化程序.py

views.py


此代码段表示“非类型”对象不可调用。能否显示回溯?编辑问题并添加一个完整的最小示例仍然是相同的错误。为了确保我做得对,我做了http://example.com/docs/ 在我的urlpatterns中,我有路径'docs/',include_docs_urlstitle='my API title',public=Trueplease add your urls.py
router = DefaultRouter()
router.register('test', SampleViewset, base_name="test")

urlpatterns = [
    path('admin/', admin.site.urls),
    path('docs/', include_docs_urls(title='My API title', public=True)),
    path('', include(router.urls)),
]
class SampleModel(models.Model):
    name = models.CharField(max_length=120)
    age = models.IntegerField()
    address = models.CharField(max_length=100)
class SampleSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = SampleModel


class SampleSerializerCreate(serializers.ModelSerializer):
    age = serializers.IntegerField(max_value=20)

    class Meta:
        fields = '__all__'
        model = SampleModel
class SampleViewset(ModelViewSet):
    serializer_class = SampleSerializer
    queryset = SampleModel.objects.all()

    def get_serializer_class(self):
        if self.action=='create':
            return SampleSerializerCreate
        return SampleSerializer
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'sample', SampleViewset)
urlpatterns = [
                  path('docs/', include_docs_urls(title='My API title', public=True, patterns=router.urls)),

              ] + router.urls