Improve document indexing API. Add django rest framework recursive to serialize index instance nodes.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user