python - Django 序列化器输出作为 JSON 对象的一部分

标签 python django django-rest-framework

上下文

我有 2 个模型:CustomerDeviceGroup

目前我有一个 API 端点 /api/v1/device-groups/?customer_uuid=<customer_uuid>,它返回与给定 DeviceGroups 相关的 Customer,如下所示:

[
    {
        "group_uuid": "c61361ac-0826-41bb-825a-8aa8e014ae0c",
        "device_group_name": "Default",
        "color": "0a2f45",
        "is_default": true
    },
    {
        "group_uuid": "1a86e8e4-b41b-4f33-aefb-ce984ef96144",
        "device_group_name": "Testgroup",
        "color": "123456",
        "is_default": false
    }
] 

目标

我希望 DeviceGroups 数组成为这样一个对象的一部分:

"device_groups": 
[
    {
        "group_uuid": "c61361ac-0826-41bb-825a-8aa8e014ae0c",
        "device_group_name": "Default",
        "color": "0a2f45",
        "is_default": true
    },
    {
        "group_uuid": "1a86e8e4-b41b-4f33-aefb-ce984ef96144",
        "device_group_name": "Testgroup",
        "color": "123456",
        "is_default": false
    }
] 

模型

# models.py

class Customer(models.Model):
    customer_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    customer_name = models.CharField(max_length=128, unique=True)


class DeviceGroup(models.Model):
    group_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    customer_uuid = models.ForeignKey(Customer, on_delete=models.DO_NOTHING)
    device_group_name = models.CharField(max_length=20)
    color = models.CharField(max_length=10)
    is_default = models.BooleanField(default=False)

序列化器

# serializers.py

class DeviceGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = DeviceGroup
        fields = ('group_uuid', 'device_group_name', 'color', 'is_default')

查看

# views.py

class DeviceGroupCustomerViewSet(viewsets.ModelViewSet):
    serializer_class = DeviceGroupSerializer

    def get_queryset(self):
        return DeviceGroup.objects.filter(customer_uuid=self.request.GET['customer_uuid'])

我尝试创建一个新的 serializer 但它没有解决我的问题:

class TestSerializer(serializers.ModelSerializer):
    device_groups = DeviceGroupSerializer(many=True, read_only=True)

    class Meta:
        model = DeviceGroup
        fields = ('device_groups', 'group_uuid', 'device_group_name', 'color', 'is_default')

我需要更改什么才能获得所需的输出?

最佳答案

你可以像这样更新你的观点

def list(self, request):
    queryset = DeviceGroup.objects.filter(customer_uuid=self.request.GET['customer_uuid'])
    serializer = UserSerializer(queryset, many=True)
    return Response({'device_groups': serializer.data})

这将获得所需的输出..

关于python - Django 序列化器输出作为 JSON 对象的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55950079/

相关文章:

python - 从 cronjob 中的脚本启动 phantomJS

html - Vim 和 NeoVim 无法检测 Django HTML 文件类型

database - django.contrib.gis.db.backends.postgis 与 django.db.backends.postgresql_psycopg2

python - 添加数据库模块

python - Django rest 框架使用 httpie 忽略丢失的 csrf token

python - 在 Django Rest Framework 的 Swagger 中显示最大值、最小值和默认值

python - 将方法添加到 ModelViewset Endpoint,而无需调用 URL 中的方法名称

python : how to get absolute path for a parent dir

python - 来自 statsmodels.formula.api 使用 Python 的交互图

javascript - 如何使用 Python 或 Lisp 删除无用的 JavaScript 代码