diff -r 9b4de34ad394 -r 97095348b3ee cubicweb/web/formfields.py --- a/cubicweb/web/formfields.py Thu Feb 11 21:59:49 2016 +0100 +++ b/cubicweb/web/formfields.py Wed Feb 17 13:45:34 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: