Example #1
0
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)
Example #2
0
    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)
Example #3
0
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)
Example #4
0
 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
Example #5
0
 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
Example #6
0
    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)