我有以下模型,其中迭代与版本有关,而版本与法规有关。我想返回当前用户拥有的所有迭代,但是将它们以嵌套结构的形式返回,如下所示:
[data: [{ name: "sample regulation 1",versions: [{ name: "sample version 1"
iterations:[ { name: "first Iteration",id: "uuid here"
},{ name: "second Iteration"
id: "uuid here"
}]
},{ name: "sample version 2"
...
}]
},{ name: "sample regulation 2"
...
}]
我知道如何在嵌套结构中获取所有迭代,但不按用户过滤(使用嵌套序列化程序),并且我知道如何按用户预取和过滤所有迭代,但不嵌套。这是我的最佳尝试。我在下面的尝试无效,因为我不知道如何按“孙子”模型进行过滤,而仅按子模型进行过滤。
queryset = Regulation.objects.filter(iterations=request.user.organization_id)
这是我的模特:
class Regulation(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
name = models.TextField(null=False)
documents = models.ManyToManyField(Document,related_name='regulation_documents',through="DocumentRegulation")
portal = models.BooleanField(default=False)
class Version(models.Model):
id = models.UUIDField(primary_key=True,editable=False)
regulation = models.ForeignKey(Regulation,related_name='versions',blank=False,null=False,on_delete=models.DO_NOTHING)
name = models.CharField(max_length=20,null=False)
class Iteration(models.Model):
id = models.UUIDField(primary_key=True,on_delete=models.DO_NOTHING)
version = models.ForeignKey(Version,related_name='iterations',on_delete=models.DO_NOTHING)
name = models.CharField(max_length=60,null=False)
date_created = models.DateTimeField(_('created at'),auto_now_add=True)
user = models.ForeignKey(User,on_delete=models.DO_NOTHING)
class Meta:
unique_together= ('name','user','version')
具有以下序列化器:
class IterationSerializer(serializers.ModelSerializer):
class Meta:
model = RequirementIteration
fields = ('id','regulation','version','name','date_created')
class VersionSerializer(serializers.ModelSerializer):
iterations = IterationSerializer(many=True,read_only=True)
class Meta:
model = RegulationVersion
fields = ('name','iterations')
class RegulationSerializer(serializers.ModelSerializer):
versions = VersionSerializer(many=True,read_only=True)
class Meta:
model = Regulation
fields = ('name','versions')
depth = 2
感谢您的指导!