Skip to content

Commit

Permalink
Fix invalid values in serializer.
Browse files Browse the repository at this point in the history
  • Loading branch information
Faakhir30 committed Sep 27, 2024
1 parent 682567a commit bde5355
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
1 change: 1 addition & 0 deletions news/1818.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix response of `RelationListFieldSerializer` by filtering out invalid items. @Faakhir30
19 changes: 18 additions & 1 deletion src/plone/restapi/serializer/relationfield.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from z3c.relationfield.interfaces import IRelationChoice
from z3c.relationfield.interfaces import IRelationList
from z3c.relationfield.interfaces import IRelationValue
from z3c.relationfield import RelationValue
from zope.component import adapter
from zope.component import getMultiAdapter
from zope.globalrequest import getRequest
Expand All @@ -33,4 +34,20 @@ class RelationChoiceFieldSerializer(DefaultFieldSerializer):
@adapter(IRelationList, IDexterityContent, Interface)
@implementer(IFieldSerializer)
class RelationListFieldSerializer(DefaultFieldSerializer):
pass
def get_value(self, default=[]):
"""Return field value reduced to list of non-broken Relationvalues.
Args:
default (list, optional): Default field value. Defaults to empty list.
Returns:
list: List of RelationValues
"""
value = getattr(
self.field.interface(self.context), self.field.__name__, default
)
if not value:
return []
if isinstance(value, RelationValue):
return [value]
return [el for el in value if el.to_object]

0 comments on commit bde5355

Please sign in to comment.