【问题标题】:Display data that no model exists in a serializer - Python - Django - Django Rest Framework显示序列化程序中不存在模型的数据 - Python - Django - Django Rest Framework
【发布时间】:2021-06-30 13:03:31
【问题描述】:

我有一个“Model-Viewset-Serializer”,我需要我的 Serializer 来显示模型中不存在的其他字段。

型号:

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False, null=False)
    type = models.CharField(max_length=100, null=False, blank=False)
    name = models.CharField(max_length=100, null=False, blank=False)

视图集:

class MyViewSet(
    mixins.ListModelMixin,
    mixins.CreateModelMixin,
    mixins.UpdateModelMixin,
    mixins.DestroyModelMixin,
    mixins.RetrieveModelMixin,
    viewsets.GenericViewSet
):
    permission_classes = [permissions.AllowAny]
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    def list(self, request, *args, **kwargs):
        queryset = MyModel.objects.filter(organization_id=request.user.my_connection_id)
        page = self.paginate_queryset(queryset)
        serializer = MySerializer(page, many=True)
        return self.get_paginated_response(serializer.data)

序列化器:

class MySerializer(ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('id', 'type', 'name', 'description', 'array')

我需要在预览中添加以下对象

数组:

[
    {'status': 'ok', 'value': '1'},
    {'status': 'pending', 'value': '5'},
    {'status': 'approval', 'value': '3'},
    {'status': 'rejected', 'value': '4'}
]

描述: '文字描述'

【问题讨论】:

  • 您希望在哪个端点上添加这些附加字段,以及如何构建它?

标签: python django django-rest-framework django-serializer django-rest-viewsets


【解决方案1】:

您可以在Serializer 中创建原始属性,假设您在代码的某些部分中有该数据数组,其中data 是您要添加到Serializer 的值:

data = [
    {'status': 'ok', 'value': '1'},
    {'status': 'pending', 'value': '5'},
    {'status': 'approval', 'value': '3'},
    {'status': 'rejected', 'value': '4'}
]

然后您可以将以下属性添加到您的序列化程序MySerializer 中,它将如下所示:

class MySerializer(ModelSerializer):
    array = serializers.ReadOnlyField(default=data)
    class Meta:
        model = MyModel
        fields = ('id', 'type', 'name', 'description', 'array')

数组是序列化程序的自定义属性,ReadOnlyField 以不同的方式使用,例如显示相关信息而不是关系中的 pk。

【讨论】:

    【解决方案2】:

    您可以使用SerializerMethodField 在序列化程序中创建其他字段。

    https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 1970-01-01
      • 2013-11-27
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多