2009-05-01 9 views
3

私は2つのクラスPortfolioとPortfolioImageを持っています。Django Manager - 関連オブジェクトのセットが空でないオブジェクトを取得する

私は私が行うことができるように、ポートフォリオのための「非空ポートフォリオ」マネージャーを書きたい
class PortfolioImage(models.Model): 
    portfolio  = models.ForeignKey('Portfolio', related_name='images') 
    ... 

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

queryset = Portfolio.nonempty.all() 

私はこのような何かをやってみましたが、私は考えていません

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

私は実際にどこから始めるべきかわかりませんが、私はこの分野で少し不足しているドキュメントを探しています。

アイデア?ありがとう、

答えて

6

最初にdocumentationによると、filter/exclude節でルックアップのモデルメソッドを使用することはできません。また、filter/excludeのPython演算子(あなたの場合は>)を使用することはできません。

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.1betaを使用している場合は、あなたのタスクを解決します。

> = 1.0 Djangoのための別の方法:

def get_query_set(self): 
    return super(NonEmptyManager,self).get_query_set()\ 
     .filter(images__isnull=True) 
関連する問題