diff --git a/rdmo/domain/renderers/mixins.py b/rdmo/domain/renderers/mixins.py index cc0589cf52..45899ba86e 100644 --- a/rdmo/domain/renderers/mixins.py +++ b/rdmo/domain/renderers/mixins.py @@ -1,6 +1,6 @@ class AttributeRendererMixin: - def render_attribute(self, xml, attribute): + def render_attribute(self, xml, attribute, include_children=True): if attribute['uri'] not in self.uris: self.uris.add(attribute['uri']) @@ -12,6 +12,10 @@ def render_attribute(self, xml, attribute): self.render_text_element(xml, 'parent', {'dc:uri': attribute['parent']}, None) xml.endElement('attribute') - if 'children' in attribute and attribute['children']: - for child in attribute['children']: + if include_children: + for child in attribute.get('children', []): self.render_attribute(xml, child) + + parent_data = attribute.get('parent_data') + if parent_data: + self.render_attribute(xml, parent_data, include_children=False) diff --git a/rdmo/domain/serializers/export.py b/rdmo/domain/serializers/export.py index 27a5bdf16e..7071482140 100644 --- a/rdmo/domain/serializers/export.py +++ b/rdmo/domain/serializers/export.py @@ -6,6 +6,7 @@ class AttributeExportSerializer(serializers.ModelSerializer): parent = serializers.CharField(source='parent.uri', default=None, read_only=True) + parent_data = serializers.SerializerMethodField() class Meta: model = Attribute @@ -15,5 +16,10 @@ class Meta: 'key', 'path', 'comment', - 'parent' + 'parent', + 'parent_data' ) + + def get_parent_data(self, obj): + if obj.parent is not None: + return AttributeExportSerializer(obj.parent).data