def update_or_add(self, **kwargs): assert kwargs, 'update_or_add() must be passed at least one keyword argument' defaults = kwargs.pop('defaults', {}) obj = get_first(self.filter(**kwargs)) result = (obj, False, True) create = False if not obj: obj = self.model() result = (obj, True, False) create = True try: params = dict([(k, v) for k, v in kwargs.items() if '__' not in k]) params.update(defaults) for attr, val in params.items(): if hasattr(obj, attr): setattr(obj, attr, val) sid = transaction.savepoint() obj.save(force_update=not create) if not create: self.add(obj) transaction.savepoint_commit(sid) return result except IntegrityError, e: transaction.savepoint_rollback(sid)
def resolve_result_medium(self): """ Get the Medium of the result key or default :return: """ return get_first( # See if a Medium exists with a key corresponding to the result # Default to the default Medium for results Medium.objects.filter(key=self.result_db_entity_key.replace( 'result', 'result__medium')), default=Medium.objects.get(key=ResultMediumKey.DEFAULT))
def resolve_result_medium(self): """ Get the Medium of the result key or default :return: """ return get_first( # See if a Medium exists with a key corresponding to the result # Default to the default Medium for results Medium.objects.filter(key=self.result_db_entity_key.replace('result', 'result__medium')), default=Medium.objects.get(key=ResultMediumKey.DEFAULT) )
def get_related_resource(self, related_instance): """ Instantiates the related resource. Override this method to subclass according to the related instance, rather than just using the to class of the Field """ related_resource_class = get_first(filter( # Check for object_class since some of our dynamic resources lack one lambda resource_class: resource_class._meta.object_class and issubclass(related_instance.__class__, resource_class._meta.object_class), self.to_class().__class__.__subclasses__()), None) related_resource = related_resource_class() if related_resource_class else self.to_class() if related_resource._meta.api_name is None: if self._resource and self._resource._meta.api_name is not None: related_resource._meta.api_name = self._resource._meta.api_name # Try to be efficient about DB queries. related_resource.instance = related_instance return related_resource
def flat_building_densities_query(bundle): return get_first( FlatBuiltForm.objects.filter(built_form_id=bundle.obj.id))
def flat_building_densities_query(bundle): return get_first(FlatBuiltForm.objects.filter(built_form_id=bundle.obj.id))