簡體   English   中英

有什么方法可以將一些特定字段從序列化程序獲取到另一個序列化程序?

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

我想要來自 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

為沒有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

如果員工是 BankInfo 上的一個字段,您可以直接使用它而無需SerializerMethodField

您可以刪除指定信息:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM