And*_*eas 5 python django serialization django-rest-framework
我正在寻找有关如何按值对序列化字段进行排序/分组的建议。这是一个代码示例,解释了我想要实现的目标。
楷模
class Folder(models.Model):
name = models.CharField()
class File(models.Model):
filetype = models.CharField()
name = models.CharField()
folder = models.ForeignKey(Folder)
Run Code Online (Sandbox Code Playgroud)
序列化器
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
fields = ('id', 'filetype', 'name')
class FolderSerializer(serializers.ModelSerializer):
files = FileSerializer(read_only=True)
class Meta:
model = Folder
fields = ('name', 'files')
Run Code Online (Sandbox Code Playgroud)
这序列化为:
{
"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"}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种序列化为此的方法:
{
"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"}
]
]
}
Run Code Online (Sandbox Code Playgroud)
尝试为此使用SerializerMethodField。您需要实现以下内容:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |