按孙子过滤嵌套模型,返回嵌套结构

我有以下模型,其中迭代与版本有关,而版本与法规有关。我想返回当前用户拥有的所有迭代,但是将它们以嵌套结构的形式返回,如下所示:

[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

感谢您的指导!

ab7788989 回答:按孙子过滤嵌套模型,返回嵌套结构

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3106490.html

大家都在问