diff -r 7f83e6a5acc3 -r 6464edfa95bb web/formfields.py --- a/web/formfields.py Fri Feb 12 16:13:43 2016 +0100 +++ b/web/formfields.py Tue Feb 16 19:18:37 2016 +0100 @@ -78,7 +78,7 @@ from yams.constraints import (SizeConstraint, StaticVocabularyConstraint, FormatConstraint) -from cubicweb import Binary, tags, uilib +from cubicweb import Binary, tags, uilib, neg_role from cubicweb.utils import support_args from cubicweb.web import INTERNAL_FIELD_VALUE, ProcessFormError, eid_param, \ formwidgets as fw @@ -1205,10 +1205,13 @@ else: targetschema = rdef.subject card = rdef.role_cardinality(role) + composite = getattr(rdef, 'composite', None) kwargs['name'] = rschema.type kwargs['role'] = role kwargs['eidparam'] = True - kwargs.setdefault('required', card in '1+') + # don't mark composite relation as required, we want the composite element + # to be removed when not linked to its parent + kwargs.setdefault('required', card in '1+' and composite != neg_role(role)) if role == 'object': kwargs.setdefault('label', (eschema.type, rschema.type + '_object')) else: