Вложенный результат для вложенного сериализатора в django со многими ко многим полям
у меня есть четыре модели :
- Модель CommonAccess, которая имеет четыре ManyToMany к AccessSubject, AccessGroup, AccessAction и AccessSubGroup .
class CommonAccess(TimeStampedModel):
name = models.CharField(blank=True,null=True,max_length=200,)
subjects = models.ManyToManyField(AccessSubject,)
groups = models.ManyToManyField(AccessGroup,blank=True,)
actions = models.ManyToManyField(AccessAction,blank=True,)
sub_groups = models.ManyToManyField('AccessSubGroup,blank=True, )
def __str__(self):
return self.ename or ''
- Модель объекта доступа:
class AccessSubject():
name = models.CharField(blank=True, null=True, max_length=200, unique=True,)
- Модель группы доступа:
class AccessGroup():
name = models.CharField(blank=True, null=True, max_length=200, unique=True,)
access_subject = models.ForeignKey(AccessSubject,on_delete=models.SET_NULL,related_name='access_groups')
- Модель AccessSubGroup:
class AccessSubGroup():
name = models.CharField(blank=True, null=True, max_length=200, unique=True,)
access_subject = models.ForeignKey(AccessSubject,on_delete=models.SET_NULL,)
access_group = models.ForeignKey(AccessGroup,on_delete=models.SET_NULL,related_name='accessgroup_subgroups')
Мне нужно при передаче идентификатора commonAccess получить commonAccess с вложенными субъектом, группой и подгруппой, которые файтер с полями ManyToMany в модели CommonAccess, как :
name: 'sample'
subject: [ name: 'sub1'
group : [ name: 'gr1'
sub_group: [ name: 'sgr1'
]
[ name: 'sgr2'
]
]
group : [ name: 'gr2'
sub_group: [name: 'sgr3']
]
]
[ name: 'sub2'
group : [ name: 'gr3'
]
]
я использовал сериализатор как показано ниже, но только субъекты фильтруются CommonAccess ManyToMany файлами, я хочу, чтобы Group и SubGroup также фильтровались CommonAccess :
class NewCommonAccessSerializer(ModelSerializer):
subjects = NewAccessSubjectNestedSerializer(read_only=True, many=True)
class Meta:
model = CommonAccess
fields = "__all__"
class NewAccessSubjectNestedSerializer(ModelSerializer):
accesslevel_groups = NewAccessGroupNestedSerializer(many = True)
class Meta:
model = AccessSubject
fields = '__all__'
class NewAccessGroupNestedSerializer(ModelSerializer):
class Meta:
model = AccessGroup
fields = '__all__'