示例#1
0
 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}}
     )
示例#2
0
 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}}
         )
示例#3
0
 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
     )
示例#4
0
 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}}
     )
示例#5
0
 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
     )