【问题标题】:How can i bind two serializers into separate one serializer django rest framework?如何将两个序列化程序绑定到单独的一个序列化程序 django rest 框架中?
【发布时间】:2021-09-05 15:51:02
【问题描述】:

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

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

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']

【问题讨论】:

    标签: python django django-models django-rest-framework django-forms


    【解决方案1】:

    您可以简单地在您的联系人序列化程序中创建一个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 类中的序列化程序。但在这里,您必须使用serializers.Serializer 而不是使用serializers.ModelSerializer,因为没有模型与之关联。

    这就是你实现它的方法-

    class CombineSerializer(serializers.Serializer):
    
        contact = ContactSerializer()
        location = LocationSerializer()
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2017-10-03
      • 2019-05-20
      • 2021-04-06
      • 2016-11-16
      • 2019-12-23
      相关资源
      最近更新 更多