简体   繁体   English

有什么方法可以将一些特定字段从序列化程序获取到另一个序列化程序?

[英]Is there any way to get some specific fields from a serializer to another serializer?

I want all data from EmployeeLiteSerializer except designation data to BankInfoSerializer without detete get_designation_data method我想要来自 EmployeeLiteSerializer 的所有数据,除了指定数据到 BankInfoSerializer 没有 detete get_designation_data 方法

 class EmployeeLiteSerializer(serializers.ModelSerializer):
        designation_data = serializers.SerializerMethodField(read_only=True)
    
        class Meta:
            model = Employee
            fields = ('first_name', 'last_name', 'code', 'designation_data')
    
        def get_designation_data(self, obj: Employee) -> Dict:
            try:
                return DesignationLiteSerializer(obj.designation).data
            except Designation.DoesNotExist:
                return {'message': 'No designation'}

    class BankInfoSerializer(serializers.ModelSerializer):
        employee = serializers.SerializerMethodField(read_only=True)
    
        class Meta:
            model = BankInfo
            fields = '__all__'
    
        def get_employee(self, obj: Employee) -> Dict:
            return EmployeeLiteSerializer(obj.employee).data

Use a new serializer for employee without designation_data .为没有designation_data的员工使用新的序列化程序。

# change the name to what you want
class BankInfoEmployeeSerializer(serializers.ModelSerializer):

    class Meta:
        model = Employee
        fields = ('first_name', 'last_name', 'code')


class BankInfoSerializer(serializers.ModelSerializer):
    employee = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = BankInfo
        fields = '__all__'

    def get_employee(self, obj: Employee) -> Dict:
        return BankInfoEmployeeSerializer(obj.employee).data

If employee is a field on BankInfo you can use it directly without SerializerMethodField如果员工是 BankInfo 上的一个字段,您可以直接使用它而无需SerializerMethodField

You can remove designation info:您可以删除指定信息:

class BankInfoSerializer(serializers.ModelSerializer):
    employee = serializers.SerializerMethodField(read_only=True)
    
    class Meta:
        model = BankInfo
        fields = '__all__'

    def get_employee(self, obj: Employee) -> Dict:
        employe_data = EmployeeLiteSerializer(obj.employee).data
        if 'designation_data' in employe_data:
            del employe_data['designation_data']
        
        return employe_data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将一些 UserModel 字段放入另一个 Serializer - How to get some of the UserModel fields into another Serializer 如何从返回所有字段(字段 = '__all__' in serializer's meta)的 django 模型序列化器中获取特定字段? - How to get specific fields from a django model serializer which returns all field(fields = '__all__' in serializer's meta)? 从另一个 model 向序列化程序添加附加字段 - adding additional fields to serializer from another model 如何将序列化程序中的字段获取到 ListView 中进行过滤 - How to get fields from Serializer into ListView for filtering 有没有办法在序列化数据之后只获取查询集中的特定字段,而不在 drf 中创建不同的序列化程序? - Is there a way to get only specific fields in a queryset after serialization data, without create a different serializer in drf? Django序列化器-返回特定字段 - Django Serializer - Returning Specific Fields 仅显示获取 api 响应 django 序列化程序中的某些字段 - display only some fields in get api response django serializer 扩展组模型的嵌套序列化器缺少用户序列化器中的某些字段 - The nested serializer of extended group model is missing some fields in the user serializer django在序列化器中从多到多字段中仅选择特定字段 - django select only specific fields from many to many field in serializer Django REST | 全局排除序列化程序中的某些字段 - Django REST | Globally exclude some fields in serializer
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM