我有一个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。
答案 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'))