gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:09 25 4
gpt4 key购买 nike

在我们的项目中,我们有大量模型,其中一些仍在开发中。我想使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com