从 Django 模型序列化程序中排除具有外键关系的特定模型字段

Exclude Specific model field with foreignkey relation from Django model Serializer

我有三个table。学生、学校、成绩

class Student(models.Model):
     name = models.CharField(max_length=225)
     address = models.CharField(max_length=255)
     school = models.Foreignkey(School)  

class School(models.Model):
     name = models.CharField(max_length=225)

class Result(models.Model):
    student = models.Foreignkey(Student)
    marks = models.FloatField()

这些模型的相应序列化器就像

class SchoolSerializer(serializers.ModelSerializer):
      class Meta:
           model = School
           fields = '__all__'

class StudentSerializer(serializers.ModelSerializer):
      school = SchoolSerializer(read_only=True)
      class Meta:
            model =  student
            fields = '__all__'

class ResultSerializer(serializers.ModelSerializer):
      student = StudentSerializer(read_only=True)
      class Meta:
           model = student
           fields = '__all__'

每当 resultserializer 调用时,我希望 studentSerializer 应该隐藏学生地址信息。我已经尝试将排除字段包含为

exclude = ('student__address',)

来自此 documentation 但这不起作用,因为 student__address 不是结果模型的模型字段。如何排除该地址字段或将其隐藏在序列化程序响应中。

您可以定义新的 ResultStudentSerializer 序列化程序,它将仅在 ResultSerializer:

中使用
class ResultStudentSerializer(serializers.ModelSerializer):
      school = SchoolSerializer(read_only=True)
      class Meta:
            model =  student
            fields = '__all__'
            exclude = ('address',)

class ResultSerializer(serializers.ModelSerializer):
      student = ResultStudentSerializer(read_only=True)
      class Meta:
           model = Result
           fields = '__all__'