Moved page model specific check into PageSerializer

This commit is contained in:
Karl Hobley 2015-08-03 19:54:14 +01:00
parent c2706ac6d4
commit 6d92ca4f3a

View file

@ -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):