Skip to main content
 首页 » 编程设计

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

2024年11月24日26unruledboy

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

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