gpt4 book ai didi

Django 管理器 - 检索具有非空相关对象集的对象

转载 作者:行者123 更新时间:2023-12-02 06:40:15 25 4
gpt4 key购买 nike

我有两个类,Portfolio 和 PortfolioImage。

class PortfolioImage(models.Model):
portfolio = models.ForeignKey('Portfolio', related_name='images')
...

class Portfolio(models.Model):
def num_images(self):
return self.images.count()

我想为Portfolio编写一个“非空投资组合”管理器,这样我就可以做到:

queryset = Portfolio.nonempty.all()

我尝试过做这样的事情,但我认为这还不够:

class NonEmptyManager(models.Manager):
def get_query_set(self):
return super(NonEmptyManager, self).get_query_set().filter(num_images > 0)

我真的不知道从哪里开始,而且我发现这方面的文档有点缺乏。

有什么想法吗?谢谢,

最佳答案

首先根据documentation您不能使用模型方法通过 filter/exclude 子句进行查找。那么你也不能将 python 运算符(在你的情况下使用 > )与 filter/exclude 一起使用。

如果您使用的是 Django 1.1beta,要解决您的任务:

from django.db.models import Count

#...

def get_query_set(self):
return super(NonEmptyManager,self).get_query_set()\
.annotate(num_images=Count('images'))\
.filter(num_images__gt=0)

但是这个解决方案有一些局限性。

Django >= 1.0 的另一种方式:

def get_query_set(self):
return super(NonEmptyManager,self).get_query_set()\
.filter(images__isnull=True)

关于Django 管理器 - 检索具有非空相关对象集的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com