From 6d92ca4f3a87644f55979832f36da9a1031e5862 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 3 Aug 2015 19:54:14 +0100 Subject: [PATCH] Moved page model specific check into PageSerializer --- wagtail/contrib/wagtailapi/serializers.py | 33 +++++++++++------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/wagtail/contrib/wagtailapi/serializers.py b/wagtail/contrib/wagtailapi/serializers.py index 3c9768893..c94f8fa8c 100644 --- a/wagtail/contrib/wagtailapi/serializers.py +++ b/wagtail/contrib/wagtailapi/serializers.py @@ -11,7 +11,6 @@ from rest_framework.fields import Field from rest_framework.relations import RelatedField from wagtail.utils.compat import get_related_model -from wagtail.wagtailcore.models import Page from wagtail.wagtailcore import fields as wagtailcore_fields from .utils import ObjectDetailURL, URLPath, pages_for_site @@ -71,23 +70,6 @@ class BaseSerializer(serializers.ModelSerializer): return super(BaseSerializer, self).build_property_field(field_name, model_class) - def build_relational_field(self, field_name, relation_info): - if relation_info.to_many: - # Find child relations (pages only) - model = getattr(self.Meta, 'model') - child_relations = {} - if issubclass(model, Page): - child_relations = { - child_relation.field.rel.related_name: get_related_model(child_relation) - for child_relation in get_all_child_relations(model) - } - - # Check child relations - if field_name in child_relations and hasattr(child_relations[field_name], 'api_fields'): - return ChildRelationField, {'child_fields': child_relations[field_name].api_fields} - - return super(BaseSerializer, self).build_relational_field(field_name, relation_info) - def serialize_meta(self, obj): """ This returns a JSON-serialisable dict to use for the "meta" @@ -157,6 +139,21 @@ class PageSerializer(BaseSerializer): return OrderedDict(data) + def build_relational_field(self, field_name, relation_info): + if relation_info.to_many: + # Find child relations + model = getattr(self.Meta, 'model') + child_relations = { + child_relation.field.rel.related_name: get_related_model(child_relation) + for child_relation in get_all_child_relations(model) + } + + # Check child relations + if field_name in child_relations and hasattr(child_relations[field_name], 'api_fields'): + return ChildRelationField, {'child_fields': child_relations[field_name].api_fields} + + return super(BaseSerializer, self).build_relational_field(field_name, relation_info) + class DocumentSerializer(BaseSerializer): def serialize_meta(self, document):