Django rest framework DRF文档-动态获取序列化程序
我有一个viewset,它为不同的HTTP方法甚至可能为不同的用户使用不同的序列化程序。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
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