更新自定义模型管理器不会生效

时间:2014-10-17 05:33:24

标签: django django-models

我有一个Order模型,其中包含一个名为OrderManager的自定义模型管理器,如下所示。

class Order(models.Model):
    # Model fields are declared here.
    ... 
    objects = OrderManager()
    all_objects = models.Manager()

class OrderManager(models.Manager):
    def get_queryset(self):
        return super(OrderManager, self).get_queryset().filter(Q(x='y') | Q(x='y'))

我通过向查询集添加另一个过滤器来更新OrderManager类,并且新的实现结果是

class OrderManager(models.Manager):
    def get_queryset(self):
        return super(OrderManager, self).get_queryset().filter(~Q(order_status='Cancelled'), Q(x='y') | Q(x='y'))

但是,当我使用更新的管理器从Order模型中检索数据时,它会忽略这些更改,但仍然会带来order_status已取消'的对象。

orders = Order.objects.all() # Retrieves cancelled orders as well.

另一方面,明确应用最后一个额外的过滤器:

orders = Order.objects.filter(~Q(order_status='Cancelled') # Ignores the cancelled orders.

是迁移问题还是什么?我觉得我在某个地方犯了一个愚蠢的错误(可能与这段代码无关),但我只是失明了。任何建议都非常感谢。

ps:我在Webfaction上使用Django 1.5.5。

1 个答案:

答案 0 :(得分:1)

在将django 1.6方法命名为get_query_set之前,而不是get_queryset(检查其他下划线)。

所以在django 1.5及更早版本中需要覆盖get_query_set方法:

class OrderManager(models.Manager):
    def get_query_set(self):
        return super(OrderManager, self).get_query_set().filter(~Q(order_status='Cancelled'), Q(x='y') | Q(x='y'))