У меня три стола. Студент, Школа, Результат
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',)
из этого документация, но это не работает, поскольку 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__'
Мне очень жаль. Я совсем об этом забываю.
Почему бы не сделать
class StudentAddressHiddenSerializer(StudentSerializer)
, который скрывает адрес, а затем использовать его в качестве сериализатора дляstudent
.