ネストされたシリアライザを使用しようとしています。ルートシリアライザを使用して孫シリアライザのデータをフィルタするにはどうすればよいですか?DRFのネストシリアライザ - 子シリアライザのデータのフィルタリング
学校とプログラムには多種多様な関係があり、あらゆる学校がどのプログラムにも加入できるようになっています。各学校にはクラスがあり、そのクラスはプログラムの一部です。そのため、PClassは学校とプログラムの両方に外部キーを持っています。
私は学校が加入すると、クラスは(その学校で)各プログラムで利用可能であることを、すべてのプログラムを取得したい.../API /学校/ 1私のAPIを呼び出す
class School(TimeStampedModel, SoftDeletableModel):
name = models.CharField(max_length=40)
slug = models.SlugField(max_length=40, default='', blank=True)
class Program(TimeStampedModel, SoftDeletableModel):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=50,default='',blank=True, unique=True)
description = models.CharField(max_length=100, blank=True)
school = models.ForeignKey(School, blank=True, null=True, related_name="programs")
class PClass(TimeStampedModel, SoftDeletableModel):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50,default='',blank=True)
description = models.CharField(max_length=100)
program = models.ForeignKey(Program, related_name="classes")
school = models.ForeignKey(School, related_name="classes")
と次のシリアライザ:
class SchoolSerializer(serializers.ModelSerializer):
programs = ProgramSerializer(source='get_programas',many=True,read_only=True)
class Meta:
model = School
fields = '__all__'
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field': 'slug'}
}
class PClassSerializer(serializers.ModelSerializer):
class Meta:
model = Class
fields = ('name','slug')
class ProgramSerializer(serializers.ModelSerializer):
school = serializers.SlugRelatedField(queryset=School.objects.all(),
slug_field='name',
required=False)
classes = PClassSerializer(many=True,read_only=True)
class Meta:
model = Program
exclude = ('id',)
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field': 'slug'}
}
これは可能ですか?それとも私のモデルをセットアップする方法に問題がありますか?
PCSerializerでシリアル化されているスクールのクラスのみを表示するにはどうすればよいですか? – JLugao
私の答えの一番下に追加されました。 – jonzlin95
しかし、program.schoolはこのプログラムに登録されているすべての学校のリストを返すでしょうか?または私は何かを逃していますか? – JLugao