def safe_delete_record(model, id=None): ''' Безопасное удаление записи в базе. В отличие от джанговского ORM не удаляет каскадно. Возвращает True в случае успеха, иначе False @deprecated нужно использовать BaseModel.safe_delete() или m3.db.safe_delete(obj) ''' import warnings warnings.warn(( 'ui.actions.utils.safe_delete_record(Model, id)' 'must by replaced with m3.db.safe_delete(obj)'), DeprecationWarning, stacklevel=2 ) from m3.db import safe_delete assert (isinstance(model, models.Model) or issubclass(model, models.Model)) assert (isinstance(id, int) or isinstance(id, long) or id is None) if isinstance(model, models.Model): obj = model else: try: obj = model.objects.get(pk=id) except model.DoesNotExist: #не нашли значит уже удалили return True return safe_delete(obj)
def delete_node(self, obj): """ Удаление группы справочника. Нельзя удалять группу если у нее есть подгруппы, или если в ней есть элементы. Но даже после этого удалять группу можно только прямым запросом, т.к. мы не знаем заранее, кто на нее может ссылаться и кого зацепит каскадное удаление джанги. """ message = '' if obj is None: message = u'Группа не существует в базе данных.' elif self.tree_model.objects.filter(**{ self.tree_parent_field: obj }).exists(): message = u'Нельзя удалить группу содержащую в себе другие группы.' elif self.list_model and self.list_model.objects.filter( **{ self.list_parent_field: obj }).exists(): message = u'Нельзя удалить группу содержащую в себе элементы.' elif not safe_delete(obj): message = ( u'Не удалось удалить группу. Возможно на неё есть ссылки.') return OperationResult.by_message(message)
def safe_delete_record(model, id=None): ''' Безопасное удаление записи в базе. В отличие от джанговского ORM не удаляет каскадно. Возвращает True в случае успеха, иначе False @deprecated нужно использовать BaseModel.safe_delete() или m3.db.safe_delete(obj) ''' import warnings warnings.warn(('ui.actions.utils.safe_delete_record(Model, id)' 'must by replaced with m3.db.safe_delete(obj)'), DeprecationWarning, stacklevel=2) from m3.db import safe_delete assert (isinstance(model, models.Model) or issubclass(model, models.Model)) assert (isinstance(id, int) or isinstance(id, long) or id is None) if isinstance(model, models.Model): obj = model else: try: obj = model.objects.get(pk=id) except model.DoesNotExist: #не нашли значит уже удалили return True return safe_delete(obj)
def delete_row_in_transaction(self, objs): message = '' if len(objs) == 0: message = u'Элемент не существует в базе данных.' else: for obj in objs: if (isinstance(obj, BaseObjectModel) or (hasattr(obj, 'safe_delete') and callable(obj.safe_delete))): try: obj.safe_delete() except RelatedError, e: message = e.args[0] else: if not safe_delete(obj): message = ( u'Не удалось удалить элемент %s. ' u'Возможно на него есть ссылки.') % obj.id break
def delete_row_in_transaction(self, objs): message = '' if len(objs) == 0: message = u'Элемент не существует в базе данных.' else: for obj in objs: if (isinstance(obj, BaseObjectModel) or (hasattr(obj, 'safe_delete') and callable(obj.safe_delete))): try: obj.safe_delete() except RelatedError, e: message = e.args[0] else: if not safe_delete(obj): message = ( u'Не удалось удалить элемент %s. ' u'Возможно на него есть ссылки.' % obj.id) break
def delete_node(self, obj): """ Удаление группы справочника. Нельзя удалять группу если у нее есть подгруппы, или если в ней есть элементы. Но даже после этого удалять группу можно только прямым запросом, т.к. мы не знаем заранее, кто на нее может ссылаться и кого зацепит каскадное удаление джанги. """ message = '' if obj is None: message = u'Группа не существует в базе данных.' elif self.tree_model.objects.filter( **{self.tree_parent_field: obj}).exists(): message = u'Нельзя удалить группу содержащую в себе другие группы.' elif self.list_model and self.list_model.objects.filter( **{self.list_parent_field: obj}).exists(): message = u'Нельзя удалить группу содержащую в себе элементы.' elif not safe_delete(obj): message = ( u'Не удалось удалить группу. Возможно на неё есть ссылки.') return OperationResult.by_message(message)