Django Count () в нескольких аннотациях

Допустим, у меня есть простая модель форума:

class User(models.Model):
    username = models.CharField(max_length=25)
    ...

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

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

Теперь предположим, что я хочу увидеть, сколько тем и сообщений есть у каждого пользователя из подмножества пользователей ( например, их имя пользователя начинается с «ab»).

Итак, если я сделаю один запрос для каждого сообщения и темы:

User.objects.filter(username_startswith="ab")
            .annotate(posts=Count('post'))
            .values_list("username","posts")

Йилдс:

[('abe', 5),('abby', 12),...]

и

User.objects.filter(username_startswith="ab")
            .annotate(topics=Count('topic'))
            .values_list("username","topics")

Результат:

[('abe', 2),('abby', 6),...]

ОДНАКО , когда я попытаюсь аннотируя оба, чтобы получить один список, я получаю нечто странное:

User.objects.filter(username_startswith="ab")
            .annotate(posts=Count('post'))
            .annotate(topics=Count('topic'))
            .values_list("username","posts", "topics")

Выводы:

[('abe', 10, 10),('abby', 72, 72),...]

Почему количество тем и сообщений увеличивается вместе? Я ожидал этого:

[('abe', 5, 2),('abby', 12, 6),...]

Каким будет лучший способ получить правильный список?

40
задан user749618 22 July 2011 в 19:40
поделиться