Shakil
Shakil

Reputation: 4630

Exclude Specific model field with foreignkey relation from Django model Serializer

I have three table. Student, School, Result

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()

corresponding serializers for those models are like

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__'

Whenever resultserializer call, i want studentSerializer should hide student address information. I have already tried to include exclude field as

exclude = ('student__address',)

from this documentation but this doesn't work as student__address is not a model field of result model. How to exclude that address field or hide it from serializer response.

Upvotes: 2

Views: 1056

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

You can define new ResultStudentSerializerserializer which will be used only in 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__'

Upvotes: 2

Related Questions