2011-07-14 21 views
0

他の2つのモデルでForeignKeyと参照されているユーザーのリストを取得する必要があります。この複雑さに達すると、私は依然としてクエリについて少し不明です。外部キー間のDjangoクエリ

モデル:英語で

class Page(models.Model): 
    user = models.ForeignKey(User) 

class EmailSent(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=200) 

、私が取得したいことはある:0ページを持っており、それらに送られた名前check_inで電子メールを持っていたことがない10のアクティブユーザー。

私がところです:

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0)[10] 

ではなく、本質的には何をするかどうかは確認してください。

email_sent = EmailSent.objects.filter(user=user, name='check_in') 

任意のアイデアは?あなたが欲しいものを得るために

答えて

2

1つの可能な方法は次のとおりです。

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0) 
EmailSent.objects.filter(user__in=users, name='check_in')[10] 

もう一つの方法は、

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0) 
users.emailsent_set.all()[10] 
+0

を、その2行ですね? 2行目の結果はEmailSentオブジェクトかUserオブジェクトですか? – Brenden

+0

はい、両方とも2行です。両方の結果はEmailSentオブジェクトであり、Userではありません。 –

0

は、以下のことを試してみてください、次のとおりです。最初のもののために

 
users = User.objects.filter(is_active=1)\ 
      .exclude(emailsent__name='check_in')\ 
      .extra(select={'page_count': "select count(*) from YOURAPP_page where user_id = auth_user.id"}, where=['page_count 0'])[:10] 

+0

ユーザーはEmailSentへの外部キーです。除外しないでください(emailsent__name = 'check_in')はemailsentが実際のユーザーモデルの場合のみ動作しますか? – Brenden

+0

いいえ、上記のコードはうまくいくはずですが、私はそれを自分で確認することはできません。 [reference](https://docs.djangoproject.com/ja/1.3/topics/db/queries/#lookups-that-span-relationships)を確認してください。 – sigurd

関連する問題