有什么方法可以将某些特定字段从一个序列化程序获取到另一个序列化程序?
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
如果 employee 是 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
我希望所有数据从 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
如果 employee 是 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