Improve document indexing API. Add django rest framework recursive to serialize index instance nodes.

This commit is contained in:
Roberto Rosario
2015-08-07 03:31:51 -04:00
parent 5d322122e0
commit 3023d99a1e
5 changed files with 155 additions and 69 deletions

View File

@@ -1,40 +1,45 @@
from __future__ import unicode_literals
from rest_framework import serializers
from rest_framework_recursive.fields import RecursiveField
from .models import Index, IndexInstanceNode, IndexTemplateNode
class IndexInstanceNodeSerializer(serializers.ModelSerializer):
documents = serializers.SerializerMethodField('get_documents_count')
children = serializers.ListField(child=RecursiveField())
documents_count = serializers.SerializerMethodField()
documents = serializers.HyperlinkedIdentityField(
view_name='rest_api:index-node-documents'
)
class Meta:
fields = ('id', 'parent', 'value', 'level', 'documents', 'children')
fields = (
'documents', 'documents_count', 'children', 'id', 'level', 'parent',
'value'
)
model = IndexInstanceNode
def get_documents_count(self, obj):
return obj.documents.count()
IndexInstanceNodeSerializer.base_fields['children'] = IndexInstanceNodeSerializer(many=True)
def get_documents_count(self, instance):
return instance.documents.count()
class IndexTemplateNodeSerializer(serializers.ModelSerializer):
class Meta:
fields = (
'id', 'parent', 'index', 'expression', 'enabled', 'link_documents',
'level'
'enabled', 'expression', 'id', 'index', 'level', 'link_documents',
'parent'
)
model = IndexTemplateNode
class IndexSerializer(serializers.ModelSerializer):
node_templates = IndexTemplateNodeSerializer(read_only=True, many=True)
instance_root = IndexInstanceNodeSerializer(read_only=True)
node_templates = IndexTemplateNodeSerializer(read_only=True, many=True)
class Meta:
fields = (
'id', 'label', 'enabled', 'document_types', 'node_templates',
'instance_root'
'document_types', 'enabled', 'id', 'instance_root', 'label',
'node_templates',
)
model = Index