2013-05-02 6 views
5

私は次のような状況があります。私は、Post、User、Friendsという3つのモデルを持っています。これは正常に動作しますdjangoにはネストされたオブジェクトに注釈を付ける方法はありますか?

User.objects.filter(name__startswith='Joe').annotate(fc=Count('my_friends1')) 

class User(models.Model): 
    name = models.CharField(max_length=100) 

class Friend(models.Model): 
    user1 = models.ForeignKey(User,related_name='my_friends1') 
    user2 = models.ForeignKey(User,related_name='my_friends2') 

class Post(models.Model): 
    subject = models.CharField(max_length=100) 
    user = models.ForeignKey(User) 

私は、ユーザーを持参するたびに、私は彼の友人の数を持って帰りたいと思います。

しかし、Postのネストされたオブジェクトとしてユーザーを連れてきたときに、この機能を有効にしたいと思います。私は最小限に抑えDB呼び出しにselect_relatedが使用していますので、私のような何かをしたい:しかし

Post.objects.filter(subject='sport').select_related('user').annotate(user__fc=Count('user__my_friends1')) 

を、これは、フィールドFC post.user下のポストの下のフィールドuser__fcを作成し、ではありません。 この機能を実現する方法はありますか?

答えて

0

hereのように、モデルにカスタムマネージャを定義してからget_queryset()メソッドをオーバーライドして、クエリ時にモデルにカスタム列を追加することができます。

このマネージャを逆リレーションに使用するには、docsの説明に従ってベースマネージャを設定する必要があります。

もう1つのアプローチは、thisのようなもので、ハードコードされた属性を持つ関連モデルのマネージャーを指定します。

関連する問題