在django-rest0-framework中基于ModelSerializer创建序列化程序时,我必须在Meta类中传递模型:

class ClientSerializer(ModelSerializer):
    class Meta:
        model = Client

我想创建一个基于URL的通用序列化程序,动态地包含模型.

我的安装程序thusfar包括URL.py和视图集:

网址.py:

 url(r'^api/v1/general/(?P<model>\w+)', kernel_api_views.GeneralViewSet.as_view({'get':'list'}))

和观点.py:

class GeneralViewSet(viewsets.ModelViewSet):

     def get_queryset(self):
            # Dynamically get the model class from myapp.models
            queryset = getattr(myapp.models, model).objects.all()
            return queryset

     def get_serializer_class(self):
         return getattr(myapp.serializers, self.kwargs['model']+'Serializer')

负责:http://127.0.0.1:8000/api/v1/general/Client个客户.物体.all()作为queryset,ClientSerializer类作为serializer

Question:我怎样才能调用"GeneralSerializer"并在其中动态分配模型?

推荐答案

您可以通过以下方式实现:

serializers.py

class GeneralSerializer(serializers.ModelSerializer):

    class Meta:
        model = None

views.py

class GeneralViewSet(viewsets.ModelViewSet):

     def get_queryset(self):
         model = self.kwargs.get('model')
         return model.objects.all()           

     def get_serializer_class(self):
         GeneralSerializer.Meta.model = self.kwargs.get('model')
         return GeneralSerializer  

serializers.py中,我们将GeneralSerializer定义为Meta中的model作为None.我们将在调用get_serializer_class()时覆盖model值.

然后在我们的views.py文件中,我们定义了一个覆盖get_queryset()get_serializer_class()GeneralViewSet.

get_queryset()中,我们从kwargs中获得model的值,并返回该查询集.

get_serializer_class()中,我们将GeneralSerializermodel设置为从kwargs获得的值,然后返回GeneralSerializer.

Python-3.x相关问答推荐

海象表达可以放在方括号中而不是括号中吗?

Paramiko SFTPClient get()和put()函数的通过/失败结果?

如何获得大Pandas 的常见时间间隔

如何使用Python将嵌套的XML转换为CSV

Python GUI:tkinter应用程序作为Windows的实时桌面

找到在指定列的另一个分组中存在重复的行.

如何提高 snowpark 程序的性能?

使用 multiprocessing 处理图像

如何将列表和字典逐行组合在一起

Python:如何在Pandas 的 .agg 函数中使用 value_counts()?

这种类型提示有什么作用?

Python:如何从句子/段落中提取地址(非正则表达式方法)?

使用正确的数据类型时,使用 Cerberus 验证 JSON 架构会引发错误

如何将具有多个参数的函数传递给 python concurrent.futures.ProcessPoolExecutor.map()?

Pytorch 的随机 Select ?

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

pysftp vs. Paramiko

Python3四舍五入到最接近的偶数

登录csv文件的正确方法是什么?

如何将numpy数组图像转换为字节?