diff --git a/ckan/controllers/group.py b/ckan/controllers/group.py index dd219866a9b..c9f851c3408 100644 --- a/ckan/controllers/group.py +++ b/ckan/controllers/group.py @@ -340,6 +340,7 @@ def _save_edit(self, id, context): tuplize_dict(parse_params(request.params)))) context['message'] = data_dict.get('log_message', '') data_dict['id'] = id + context['allow_partial_update'] = True group = get_action('group_update')(context, data_dict) if id != group['name']: diff --git a/ckan/lib/dictization/model_save.py b/ckan/lib/dictization/model_save.py index a3bf73ab341..547d15ac3ac 100644 --- a/ckan/lib/dictization/model_save.py +++ b/ckan/lib/dictization/model_save.py @@ -382,21 +382,22 @@ def group_dict_save(group_dict, context): context['group'] = group - pkgs_edited = group_member_save(context, group_dict, 'packages') - group_users_changed = group_member_save(context, group_dict, 'users') - group_groups_changed = group_member_save(context, group_dict, 'groups') - group_tags_changed = group_member_save(context, group_dict, 'tags') - log.debug('Group save membership changes - Packages: %r Users: %r ' - 'Groups: %r Tags: %r', pkgs_edited, group_users_changed, - group_groups_changed, group_tags_changed) - - # We will get a list of packages that we have either added or - # removed from the group, and trigger a re-index. - package_ids = pkgs_edited['removed'] - package_ids.extend( pkgs_edited['added'] ) - if package_ids: - session.commit() - map( rebuild, package_ids ) + if group_dict.get('packages', None) or not allow_partial_update: + pkgs_edited = group_member_save(context, group_dict, 'packages') + group_users_changed = group_member_save(context, group_dict, 'users') + group_groups_changed = group_member_save(context, group_dict, 'groups') + group_tags_changed = group_member_save(context, group_dict, 'tags') + log.debug('Group save membership changes - Packages: %r Users: %r ' + 'Groups: %r Tags: %r', pkgs_edited, group_users_changed, + group_groups_changed, group_tags_changed) + + # We will get a list of packages that we have either added or + # removed from the group, and trigger a re-index. + package_ids = pkgs_edited['removed'] + package_ids.extend( pkgs_edited['added'] ) + if package_ids: + session.commit() + map( rebuild, package_ids ) extras = group_extras_save(group_dict.get("extras", {}), context) if extras or not allow_partial_update: