web/views/reledit.py
branchstable
changeset 6329 918dd7448630
parent 6289 163a7f1d5bba
child 6582 8eb7883b4223
equal deleted inserted replaced
6328:b71e9deddf00 6329:918dd7448630
   114         if not self._should_edit_relation(entity, rschema, role):
   114         if not self._should_edit_relation(entity, rschema, role):
   115             return None, value
   115             return None, value
   116         return formid, value
   116         return formid, value
   117 
   117 
   118     def _handle_relation(self, entity, rschema, role, divid, reload, formid):
   118     def _handle_relation(self, entity, rschema, role, divid, reload, formid):
   119         rvid = self._compute_best_vid(entity.e_schema, rschema, role)
   119         rvid = self._rules.get('rvid', 'autolimited')
   120         formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
   120         formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
   121         if formid is None:
   121         if formid is None:
   122             return self.w(value)
   122             return self.w(value)
   123         rtype = rschema.type
   123         rtype = rschema.type
   124         display_label, related_entity = self._prepare_form(entity, rtype, role)
   124         display_label, related_entity = self._prepare_form(entity, rtype, role)
   131         ttypes = self._compute_ttypes(rschema, role)
   131         ttypes = self._compute_ttypes(rschema, role)
   132         related_rset = entity.related(rschema.type, role)
   132         related_rset = entity.related(rschema.type, role)
   133         add_related = self._may_add_related(related_rset, entity, rschema, role, ttypes)
   133         add_related = self._may_add_related(related_rset, entity, rschema, role, ttypes)
   134         edit_related = self._may_edit_related_entity(related_rset, entity, rschema, role, ttypes)
   134         edit_related = self._may_edit_related_entity(related_rset, entity, rschema, role, ttypes)
   135         delete_related = edit_related and self._may_delete_related(related_rset, entity, rschema, role)
   135         delete_related = edit_related and self._may_delete_related(related_rset, entity, rschema, role)
   136 
   136         rvid = self._rules.get('rvid', 'autolimited')
   137         rvid = self._compute_best_vid(entity.e_schema, rschema, role)
       
   138         formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
   137         formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
   139         if formid is None or not (edit_related or add_related):
   138         if formid is None or not (edit_related or add_related):
   140             # till we learn to handle cases where not (edit_related or add_related)
   139             # till we learn to handle cases where not (edit_related or add_related)
   141             self.w(value)
   140             self.w(value)
   142             return
   141             return
   143 
       
   144         rtype = rschema.type
   142         rtype = rschema.type
   145         ttype = ttypes[0]
   143         ttype = ttypes[0]
   146         _fdata = self._prepare_composite_form(entity, rtype, role, edit_related, add_related and ttype)
   144         _fdata = self._prepare_composite_form(entity, rtype, role, edit_related,
       
   145                                               add_related and ttype)
   147         display_label, related_entity = _fdata
   146         display_label, related_entity = _fdata
   148         form, renderer = self._build_form(entity, rtype, role, divid, formid, reload,
   147         form, renderer = self._build_form(entity, rtype, role, divid, formid, reload,
   149                                           display_label, related_entity, dict(vid=rvid))
   148                                           display_label, related_entity, dict(vid=rvid))
   150         self.view_form(divid, value, form, renderer,
   149         self.view_form(divid, value, form, renderer,
   151                        edit_related, add_related, delete_related)
   150                        edit_related, add_related, delete_related)
   152 
       
   153     def _compute_best_vid(self, eschema, rschema, role):
       
   154         vid = self._rules.get('rvid', None)
       
   155         if vid is None:
       
   156             vid = 'autolimited'
       
   157         return vid
       
   158 
   151 
   159     def _compute_ttypes(self, rschema, role):
   152     def _compute_ttypes(self, rschema, role):
   160         dual_role = neg_role(role)
   153         dual_role = neg_role(role)
   161         return getattr(rschema, '%ss' % dual_role)()
   154         return getattr(rschema, '%ss' % dual_role)()
   162 
   155