Answer the question
In order to leave comments, you need to log in
How can I remove empty fields when recursing?
Good afternoon. Rucursively sterilizing hierarchical data.
Is it possible in serializers not to display a field at all, but not to display an empty one?
class HierarchicalTag(MPTTModel, TagBase):
name = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.CASCADE)
def __str__(self):
return self.name
class MPTTMeta:
order_insertion_by = ['name']
def __unicode__(self):
return self.name
class TagsList(generics.ListAPIView):
serializer_class = ReadHierarchicalTagSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def get_queryset(self):
return HierarchicalTag.objects.root_node(tree_id=1).get_ancestors(include_self=True)
class ReadHierarchicalTagSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
children = serializers.ListField(child=RecursiveField(), source='get_children', read_only=True)
class Meta:
model = HierarchicalTag
fields = ['id', 'name', 'children', 'user']
def get_user(self, model):
if TaggedContentItem.objects.filter(tag_id=model.id).exists():
return [o.content_object.user.username for o in TaggedContentItem.objects.filter(tag_id=model.id)]
{
"id": 36,
"name": "MS Project",
"children": [],
"user": null
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question