Django Рекурсивный внешний ключ для сериализатора Получение ошибок not iterable

Я просмотрел много ответов на свои вопросы, я попробовал все решения, приведенные здесь

В принципе, сценарий почти такой же, я хотел рекурсивный запрос в моем сериализаторе. Сначала я хочу показать свои модели

class Policy(TimeStampedModel):
    product = models.ForeignKey(Product, related_name='policies', on_delete=models.PROTECT, null=True)
    name = models.CharField(max_length=32)
    slug = AutoSlugField(populate_from='name', editable=True, slugify_function=slugify)

и у меня есть внешний ключ от Policy к PolicyCondition. вот модель условий политики.

class PolicyCondition(TimeStampedModel):
    policy = models.ForeignKey(Policy, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    slug = AutoSlugField(populate_from='name', editable=True, slugify_function=slugify,null=True)

    text = models.TextField()
    parent = models.ForeignKey(
        'self',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='children'
    )

В сериализаторе я получаю все данные из модели политики. Вот мой сериализатор.

class PolicyListSerializer(serializers.ModelSerializer):
    conditions = PolicyConditionSerializer(source='policycondition_set', many=True)



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

Вот мой сериализатор условий политики

class PolicyConditionSerializer(serializers.ModelSerializer):


    class Meta:
        model = PolicyCondition
        fields = [
            'id',
            'policy',
            'name',
            'text',
            'slug',
            'parent'
        ]

    def to_representation(self, instance):
        self.fields['parent'] = PolicyConditionSerializer(read_only=True)
        return super(PolicyConditionSerializer, self).to_representation(instance)

Я получаю ошибку как PolicyCondition' object is not iterable любое решение, что я упускаю здесь.

Измените класс сериализатора следующим образом:

class PolicyConditionSerializer(serializers.ModelSerializer):
    parent = PolicyConditionSerializer(read_only=True)
    class Meta:
        model = PolicyCondition
        fields = [
            'id',
            'policy',
            'name',
            'text',
            'slug',
            'parent'
        ]

или редактировать в_представлении:

def to_representation(self, instance):
    data = super(PolicyConditionSerializer, self).to_representation(instance)
    data['parent'] = PolicyConditionSerializer(read_only=True).data
    return data
Вернуться на верх