【问题标题】:Using a custom reverse manager in Filter在过滤器中使用自定义反向管理器
【发布时间】:2015-08-12 17:15:42
【问题描述】:

鉴于我有:

class Publisher(Model):
  pass

class Author(Model):
  name = models.CharField(...)
  publisher = models.ForeignKey(Publisher)
  is_alive = models.BooleanField(...)
  objects = models.Manager()  # Default Manager
  alives = AliveManager()    # Custom Manager

现在我可以使用以下方法进行过滤:

Publisher.objects.filter(author__name='xxx', author__is_alive=True)

我的问题是无论如何要在过滤器语句中利用custom reverse manager

publisher.author_set(manager="alives")

给我这个给定出版商。

【问题讨论】:

  • 我不明白你在问什么。经理是经理,而不是过滤条件。您希望如何在过滤器中使用经理?
  • 鉴于我已经编写了一个过滤我想要的作者的管理器,在 Publisher 查询集上编写过滤器时有没有办法使用该管理器?我想查找所有出版商都有在世的作者,并且作者的名字在 XXX 中。

标签: django django-models django-queryset django-orm django-managers


【解决方案1】:

我猜这是文档中的相关部分:

[...] get_queryset() 方法中的默认过滤,该过滤将应用于 all() 调用。

class AliveManager(Manager):
    def get_queryset(self):
        qs = super(AliveManager, self).get_queryset()
        return qs.filter(is_alive=True)

class Author(Model):
    name = models.CharField(...)
    publisher = models.ForeignKey(Publisher)
    is_alive = models.BooleanField(...)
    objects = models.Manager()  # Default Manager
    alives = AliveManager()    # Custom Manager


# returns all alive authors
publisher.author_set(manager='alives').all()
# filters through alive authors
publisher.author_set(manager='alives').filter(author__name='xxx')

【讨论】:

  • 我希望得到一个发布者查询集。
  • 如果您想获得具有活跃作者的出版商,请改为为 Publisher 模型添加一个管理器。据我所知,您不能使用其他模型管理器。
  • @AlexRothberg,你能在这里分享你的最终解决方案吗?
猜你喜欢
  • 2015-02-10
  • 2013-02-05
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多