python - 是否可以为每个模型自动创建 View 集和序列化器?

标签 python django django-rest-framework

在我们的项目中,我们有大量模型,其中一些仍在开发中。我想使用 Django Rest Framework 创建 REST API,但不想为我们拥有的每个模型创建单独的序列化器类和 ModelViewSet(因为它们中的大多数应该可以通过 API 访问)。

目前,我们的每个模型都有一个这样的序列化器:

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = '__all__'

另外在views.py中有ModelViewSet:

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer

是否有可能以某种方式减少代码量并使这种方法更加灵活?我正在考虑这样的事情:

for model in models:
    ser = createSerializer()
    createViewSet(ser)

每次调用都会创建一个单独的类。或者是否有一个类可以使这成为可能?

最佳答案

基于@bdoubleus的回答,我们可以使用 View 集进行一些小的修改:

from rest_framework import serializers

# Template class for serializing
class GeneralSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'

class GenericAPIView(generics.ListAPIView):
    def dispatch(self, request, *args, **kwargs):
        self.model = kwargs.pop('model')
        self.queryset = self.model.objects.all()
        serializer = GeneralSerializer
        serializer.Meta.model = self.model
        self.serializer_class = serializer
        return super().dispatch(request, *args, **kwargs)

为了结束这个生成器,我们需要在 urls.py 中为每个模型创建一个 URL 路由:

app = apps.get_app_config('testapp')

for model_name, model in app.models.items():
    urlpatterns.append(path(model_name, views.GenericAPIView.as_view(), {'model': model}))

关于python - 是否可以为每个模型自动创建 View 集和序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358079/

相关文章:

python - Python如何获取异常或错误发生的行号?

Python:如何轻松引用 .format() 中的元素

jquery - 在django中使用ajax时无法发布

python - 在 django api 调用中检索 UNIX TIMESTAMP

python - 具有动态选项的 Django Rest Framework MultipleChoiceField

django-rest-framework - 如何在 django-rest 中处理 M2M 关系

python - Mongoengine 序列化器错误 | python | Django 休息框架

python - 查找错误 : Resource 'corpora/stopwords' not found

python - Python 2 和 3 之间 ctypes 的差异

python - 在 Django 中实现单独的递增主键