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