Django Рекурсивный запрос с внешним ключом self

У меня есть следующая модель django с атрибутом parent в качестве внешнего ключа self

class PolicyCoverage(TimeStampedModel):
    policy = models.ForeignKey(Policy, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    slug = AutoSlugField(populate_from='name', editable=True, slugify_function=slugify)
    amount = models.DecimalField(max_digits=19, decimal_places=10)
    parent = models.ForeignKey(
        'self', on_delete=models.CASCADE,
        null=True,
        blank=True)

Я настроил свой сериализатор для отправки данных на front end, но я не получаю желаемого результата но я не получаю желаемого результата для простоты Я хочу получить данные таким образом

{parent A-->
     {child A of parent A, 
      child B of parent A[
           {child A of Parent B Child B of Parent A}
        ]

но данные, которые я получаю сейчас, такие

  {parent A-->
         {child A of parent A, 
          child B of parent A[
               {child A of Parent B Child B of Parent A
              }
            ]},
           {child A of Parent B},
           {Child B of Parent A}

Как заставить рекурсивный запрос работать Я перепробовал почти все предыдущие stack overflow qsn, но ничего не получается.

вот сериализатор, который я делал

class ParentSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyCoverage
        fields = [
            'slug',
            'policy',
            'name',
            'amount',
            'parent'

        ]


class PolicyCoverageSerializer(serializers.ModelSerializer):
    parent = serializers.SerializerMethodField()

    class Meta:
        model = PolicyCoverage
        fields = [
            'slug',
            'policy',
            'name',
            'amount',
            'parent'
        ]

    def get_parent(self, obj):
        value = PolicyCoverage.objects.filter(Q(parent=obj) | Q(parent__parent=obj), parent__isnull=False)

        return ParentSerializer(value, many=True).data


class PolicyListSerializer(serializers.ModelSerializer):
    policy_coverage = PolicyCoverageSerializer(
        source='policycoverage_set', many=True)

    class Meta:
        model = Policy
        fields = [
            'policy_coverage'
        ]

Надеюсь, я смог объяснить свою проблему, спасибо за понимание.

Вернуться на верх