Cómo serializar la relación jerárquica en Django REST

Tengo un modelo de Django que es jerárquico usando django-mptt, que se parece a:

class UOMCategory(MPTTModel, BaseModel): """ This represents categories of different unit of measurements. """ name = models.CharField(max_length=50, unique=True) description = models.CharField(max_length=50, unique=True) parent = TreeForeignKey('self', null=True, blank=True, related_name='%(app_label)s_%(class)s_sub_uom_categories') 

El problema ahora es que creé una API REST utilizando el Marco REST de Django; ¿Cómo me aseguro de que el campo padre devuelva datos serializados?

Aquí está el serializador de modelos:

 class UOMCategorySerializer(BaseModelSerializer): """ REST API Serializer for UOMCategory model """ class Meta: model = UOMCategory 

En DRF puede usar un serializador como un campo en otro serializador. Sin embargo, la recursión no es posible.

Tom Christie publicó una solución en otra pregunta ( Django rest marco nested objetos auto-referenciales ). Su solución también funcionará con su problema.

En su clase UOMCategorySerializer.Meta usted especifica los campos que desea usar, también enumere los campos principales y / o secundarios allí. Entonces usas la solución de Tom Christies.

En su caso esto daría:

 class UOMCategorySerializer(ModelSerializer): class Meta: model = UOMCategory fields = ('name', 'description', 'parent', 'children') 

Solución de Tom Christies: al especificar qué campo usar para padres y / o niños, evita usar demasiada recursión (y posiblemente infinita):

 UOMCategorySerializer.base_fields['parent'] = UOMCategorySerializer() UOMCategorySerializer.base_fields['children'] = UOMCategorySerializer(many=True) 

Lo anterior funciona para mí en una situación similar.