我有两个类,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()
Run Code Online (Sandbox Code Playgroud)
我想为Portfolio编写一个"非空投资组合"经理,这样我就能做到:
queryset = Portfolio.nonempty.all()
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情,但我认为这甚至不是很接近:
class NonEmptyManager(models.Manager):
def get_query_set(self):
return super(NonEmptyManager, self).get_query_set().filter(num_images > 0)
Run Code Online (Sandbox Code Playgroud)
我真的不知道从哪里开始,我发现这方面的文档有点缺乏.
有任何想法吗?谢谢,
首先根据文档,您不能使用模型方法来查找filter/ excludeclause.然后,你也不能使用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)
Run Code Online (Sandbox Code Playgroud)
但这种解决方案有一些局限性.
Django> = 1.0的另一种方式:
def get_query_set(self):
return super(NonEmptyManager,self).get_query_set()\
.filter(images__isnull=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |