Reputation: 1201
I followed a lot of answers regarding my questions, I tried all solutions given here
Basically scenario is almost same I wanted recursive query in my serializer. Firstly I want to show my models
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)
and I have Foreign Key from Policy
to PolicyCondition
here is policy condition model.
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'
)
On serializer I am fetching all my data from policy model. Here is my serializer.
class PolicyListSerializer(serializers.ModelSerializer):
conditions = PolicyConditionSerializer(source='policycondition_set', many=True)
class Meta:
model = Policy
fields = ['conditions']
Here is my policy condition serializer
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)
I am getting error as
PolicyCondition' object is not iterable
any soluton what I am missing here.
Upvotes: 1
Views: 146
Reputation: 587
Change serializer class like this:
class PolicyConditionSerializer(serializers.ModelSerializer):
parent = PolicyConditionSerializer(read_only=True)
class Meta:
model = PolicyCondition
fields = [
'id',
'policy',
'name',
'text',
'slug',
'parent'
]
or edit to_representation:
def to_representation(self, instance):
data = super(PolicyConditionSerializer, self).to_representation(instance)
data['parent'] = PolicyConditionSerializer(read_only=True).data
return data
Upvotes: 1