python - Django Rest Framework 可选的嵌套关系

标签 python django django-rest-framework

是否可以使用嵌套关系序列化器作为选项?这是文档中的序列化程序示例:

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = '__all__'

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = '__all__'

当我调用专辑列表 localhost:8000/album/1/ 时,这是响应:

{
    'album_name': 'The Grey Album',
    'artist': 'Danger Mouse',
    'tracks': [
        {'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
        {'order': 2, 'title': 'What More Can I Say', 'duration': 264},
        {'order': 3, 'title': 'Encore', 'duration': 159},
        ...
    ],
}

是否有类似localhost:8000/album/1/?include=tracks 的选项,因此轨道数据仅在include 参数中声明时出现。

最佳答案

一个例子

class OrderSerializer(ModelSerializer):
    payments = PaymentSerializer(many=True, read_only=True)
    evaluations = OrderEvaluationSerializer(many=True, read_only=True)

    def __init__(self, *args, **kwargs):
        super(OrderSerializer, self).__init__(*args, **kwargs)

        request = kwargs['context']['request']
        include_address = request.GET.get('include_address', False)  # <<<---

        if include_address:  # <<<---
            self.fields['user_location'] = UserLocationSerializer(read_only=True, context=kwargs['context'])  # <<<---

来自这里:http://masnun.com/2015/10/21/django-rest-framework-dynamic-fields-in-serializers.html

关于python - Django Rest Framework 可选的嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046594/

相关文章:

python - 欧几里得距离的向量化实现

javascript - Django 和 Reactjs : complex templates

将webapp部署到树莓派时Python virtualenv?

python - 在同一项目中使用 Django Rest Api

Python:没有明显原因的 NameError?

python - 值错误 : cannot copy sequence with size 2 to array axis with dimension 4

python - 通过 xpath 访问 XML 属性时出现问题

Django项目层次结构/组织

django - 在 DRF 中使用 Serializer 获取 StringRelatedField 和 PrimaryKeyRelatedField

django-rest-framework - Django rest swagger 文档将选择文件显示为字符串