当前位置: 首页 > 面试题库 >

在Meta中使用动态模型创建通用序列化器

何星鹏
2023-03-14
问题内容

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

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

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

到目前为止,我的设置包括urls.py和viewset:

urls.py:

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

和views.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将Client.objects.all()作为queryset和ClientSerializer类作为序列化器

问题: 我该如何做才能调用“ 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,我们定义GeneralSerializermodelMeta作为Nonemodel调用时,我们将覆盖该值get_serializer_class()

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

在中get_queryset(),我们获取modelfrom的值kwargs并返回该查询集。

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



 类似资料:
  • 问题内容: 我有以下表格示例。Thera可以是无限的分支机构和客户。我需要对该分支进行分组并计算他们的客户,然后用不同的列来显示它。 请注意,可以有无限的分支和客户,查询不仅必须在这种情况下有效。 在这种情况下,可接受的结果是: 示例SQL DATA 问题答案: 我认为写一个返回变量结构的流水线表函数虽然很复杂,但却是可能的。您的管道表函数将使用Oracle Data Cartridge接口和An

  • 问题内容: 这是有关django的问题。我有一个模特说“汽车”。这将具有一些基本字段,例如“颜色”,“车辆所有者名称”,“车辆成本”。 我想提供一个表格,用户可以根据他要添加的汽车添加额外的字段。例如,如果用户添加“汽车”,则他将在运行时动态地在表单中添加其他字段,例如“汽车里程”,“校准制造商”。假设用户想要添加“卡车”,他将添加“可以运载的货物”,“许可证”等。 如何在Django中实现这一目

  • 问题内容: 我在Android应用程序(带有Gson库)中实现Json反序列化存在一些问题 我已经上了这样的课 反序列化的调用是: 问题是调用后的result.posts列表包含一个LinkedTreeMap对象数组(具有正确的值,因此问题是反序列化)而不是MyJson对象。当我使用MyObject而不是T时,一切运行正常并且MyObject是正确的。 那么,有什么方法可以在不创建自定义反序列化器

  • 问题内容: 这是我的情况: 当用户登录到我的网站时,我为给定的用户排队执行一系列任务(通常每个任务花费100毫秒的时间,每个用户有100毫秒的任务)。这些任务排队到默认的Celery队列中,而我有100的工人正在运行。我使用websockets在后端完成任务时向用户显示实时进度。如果我只有1个或2个用户处于活动状态,那么生活会很好。 现在,如果我有几个并发用户登录到我的站点,则后一个用户将排在初始

  • 问题内容: 我的Flask路线中有一半需要使用变量或。如何创建到这些位置的链接? 需要一个参数传递给函数,但是我不能添加参数? 问题答案: 它使用关键字参数作为变量:

  • 问题内容: 如何使用动态模板创建指令? 这就是我现在所拥有的,它可以正确显示标签。但是,我不确定如何在模板上附加其他HTML。或将2个模板合并为1个。 问题答案: 有类似的需求。做这份工作。(不完全确定这是否是“ THE”方法,仍然可以通过角度进行工作) http://jsbin.com/ebuhuv/7/edit-我的探索测试。 需要注意的一件事(以我的示例为例),我的要求之一是,一旦单击“保存