如何使用Django Rest Fram对序列化字段排序

2024-04-27 23:58:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找如何按值对序列化字段排序/分组的建议。 下面是一个代码示例,它解释了我想要实现的目标。在

模型

class Folder(models.Model):
    name = models.CharField()


class File(models.Model):
    filetype = models.CharField()
    name = models.CharField()
    folder = models.ForeignKey(Folder)

序列化程序

^{pr2}$

这将序列化为:

{
    "name": "Test Folder",
    "files": [
        {"id": 1, "filetype": "pdf", "name": "some pdf file"}.
        {"id": 2, "filetype": "pdf", "name": "some other pdf file"},
        {"id": 3, "filetype": "txt", "name": "some text file"}
    ]
}

我正在寻找一种方法将其序列化为:

{
    "name": "Test Folder",
    "files": [
        "pdf": [
            {"id": 1, "name": "some pdf file"},
            {"id": 2, "name": "some other pdf file"}
        ],
        "txt": [
            {"id": 3, "name": "some text file"}
        ]
    ]
}

Tags: nametestidmodel序列化pdfmodelssome
1条回答
网友
1楼 · 发布于 2024-04-27 23:58:30

尝试使用^{}进行此操作。您需要实现以下内容:

class FolderSerializer(serializers.ModelSerializer):
    files = serializers.SerializerMethodField()

    class Meta:
        model = Folder
        fields = ('name', 'files')

    def get_files(self, obj):
        result = {'pdf': [], 'txt':[]}
        for file in obj.file_set.all():
            serializer = FileSerializer(file)
            if file.name.endswith('pdf'):
                  result['pdf'].append(serializer.data)
            if file.name.endswith('txt'):
                  result['txt'].append(serializer.data)   
        return result

相关问题 更多 >