def remove(self, rel, owner, target_ids): filtered_ids = filter(lambda x: x not in target_ids, owner._reference_fields[rel._name]) for obj in registry.get_model_instances(owner._id): obj._reference_fields[rel._name] = filtered_ids owner.get_collection().update( {'_id':owner._id}, {'$pullAll':{rel._name:target_ids}} )
def set(self, owner, target, update_inverse=True): target.assert_saved() self._cache = target for obj in registry.get_model_instances(owner._id): obj._reference_fields[self._name] = target._id if owner._id: owner.get_collection().update( {'_id':owner._id}, {'$set':{self._name:target._id}} )
def remove(self, rel, owner, target_ids): for target_id in target_ids: for obj in registry.get_model_instances(target_id): try: obj._reference_fields[rel._inverse_name].remove(owner._id) except ValueError: pass rel.get_target_model().get_collection().update( {'_id':{'$in':target_ids}}, {'$pull':{rel._inverse_name:owner._id}}, multi=True )
def _list_add(self, reference_field, owner, target): if not owner._reference_fields.get(reference_field): owner._reference_fields[reference_field] = [] elif target._id in owner._reference_fields[reference_field]: return for obj in registry.get_model_instances(owner._id): if not obj._reference_fields.get(reference_field): obj._reference_fields[reference_field] = [] obj._reference_fields[reference_field].append(target._id) owner.get_collection().update( {'_id':owner._id}, {'$addToSet':{reference_field:target._id}} )
def remove(self, rel, owner, target_ids): super(ManyToMany.LocalAndRemoteList, self).remove(rel, owner, target_ids) for target_id in target_ids: for obj in registry.get_model_instances(target_id): field = obj._reference_fields.get(rel._inverse_name) if field: try: field.remove(owner._id) except ValueError: pass rel.get_target_model().get_collection().update( {'_id':{'$in':target_ids}}, {'$pull':{rel._inverse_name:owner._id}}, multi=True )