时间:2017-04-05 07:31:08

标签: django

Django 1.10.4

我想使用自定义删除方法删除我的模型串。

list_.models.py

class MyQuerySet(models.query.QuerySet):

    def delete(self):
        print("deleted")
        pdb.set_trace()
        raise SuspiciousFileOperation


class NoDeleteManager(models.Manager):
    def get_query_set(self):
        return MyQuerySet(self.model, using=self._db)


class MyModel(models.Model):

    objects = NoDeleteManager()

在shell中:

>>> from list_.models import MyModel
>>> m = MyModel.objects.create()
>>> m
<MyModel: MyModel object>
>>> m.id
1
>>> ml = MyModel.objects.all()
>>> ml
<QuerySet [<MyModel: MyModel object>]>
>>> ml.delete()
(1, {'list_.MyModel': 1})
>>> ml
<QuerySet []>

好吧,列表中的所有对象都删除了没有任何符号。这意味着我的自定义管理器无法以某种方式应用。

你能帮我理解我的错吗?

1 个答案:

答案 0 :(得分:0)

您可以根据https://docs.djangoproject.com/en/1.10/topics/db/managers/#calling-custom-queryset-methods-from-the-manager

尝试此操作吗?
class MyQuerySet(models.query.QuerySet):

    def delete(self):
        print("deleted")
        pdb.set_trace()
        raise SuspiciousFileOperation


class NoDeleteManager(models.Manager):
    def get_queryset(self):
        return MyQuerySet(self.model, using=self._db)

    def delete(self):
        return self.get_queryset().delete()

class MyModel(models.Model):

    objects = NoDeleteManager()