我如何将两个序列化程序绑定到单独的一个序列化程序 Django 休息框架中?

How can i bind two serializers into separate one serializer django rest framework?

info:一个是用户,第二个是用户数据,如 phone 号码、城市等 现在我可以将这两个序列化器添加到第三个序列化器中并在第三个序列化器中显示所有数据

问题:现在我想创建新的序列化器,我可以在其中组合两个序列化器属性。但我不明白如何才能将两个序列化程序绑定到不同的序列化程序并显示所有数据?

serializers.py

class ContactSerializer(serializers.ModelSerializer):

    class Meta:
        model = Contact
        fields = ['email', 'phone']


class LocationSerializer(serializers.ModelSerializer):

    class Meta:
        model = Location
        fields = ['city']

想实现

class CombineSerializer(serializers.ModelSerializer):

    class Meta:
        fields = ['email', 'phone', 'city']

您可以简单地在您的联系人序列化程序中创建一个 LocationSerializer 的对象。这种方法将创建位置序列化程序的嵌套对象。

class ContactSerializer(serializers.ModelSerializer):

    location = LocationSerializer() #if the contact serializer have multiple city then just add `many=True` as an argument.

    class Meta:
        model = Contact
        fields = ['email', 'phone', 'location']

列出对象时将如下所示 -

{
    'email':'some@email.com',
    'phone':'00009999888', 
    'location':{
        'city':'some_city'
    }
}

但是,如果您想将两个对象都作为嵌套对象,那么您可以简单地在 CombineSerializer class 中调用序列化程序。但是这里不能使用 serializers.ModelSerializer,您必须使用 serializers.Serializer,因为没有模型与之关联。

这就是实现它的方法 -

class CombineSerializer(serializers.Serializer):

    contact = ContactSerializer()
    location = LocationSerializer()

在这种情况下,列出对象时将如下所示 -

{
    'contact' : {
        'email' : 'some@email.com',
        'phone' : '00999887666'
    },
    'location' : {
        'city' : 'Some City'
    }
}