Django-запрос по внешним ключам - PullRequest
0 голосов
/ 14 июля 2011

Мне нужно получить список пользователей, на которые ссылаются как ForeignKey в двух других моделях. Мне все еще немного непонятно, когда запросы достигают этой сложности.

Модель:

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

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

На английском я хочу получить следующее: 10 активных пользователей, у которых есть 0 страниц, и им никогда не отправлялось письмо с именем check_in.

Вот где я:

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 ]

2 голосов
/ 14 июля 2011

Один из возможных способов получить то, что вы хотите:

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 голосов
/ 14 июля 2011

Попробуйте следующее: </p> <pre> 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] </pre> <p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...