Простой групповой (без учета) в Django - PullRequest
2 голосов
/ 23 апреля 2010

Если бы это был raw-SQL, это было бы просто, но в Django найти его довольно сложно. То, что я хочу, это действительно:

SELECT
  user_id
FROM
  django_comments
WHERE
  content_type_id = ? AND
  object_pk = ?
GROUP BY
  user_id

Проблема в последних двух строках. Я хотел бы сделать это "Django-way", но единственное, что я нашел, это упоминание о агрегатах и ​​аннотациях, которые, я не думаю, решают эту проблему ... не так ли? Если бы кто-то мог мне это объяснить, я бы очень признателен.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Насколько я вижу, вы хотите, чтобы авторы всех комментариев конкретного GenericObject (скажем, статьи).

Djangos ORM предлагает следующие из отношений Таким образом, решение будет таким:

from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType

User.objects.filter(comment_comments__content_type=ContentType.objects.get(app_label="articles", model="article"), comment_comments__object_pk="12").distinct()

, если вы хотите иметь идентификатор пользователя, используйте такие вещи, как values_list или values ​​

User.objects.filter(comment_comments__content_type=ContentType.objects.get(app_label="articles", model="article"), comment_comments__object_pk="12").distinct().values_list('id')

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2010

В Django это тоже легкая задача, но вам нужно перестать думать с точки зрения SQL и вместо этого спросить себя, чего вы на самом деле хотите достичь.

«Я хочу получить список всех идентификаторов пользователей, которые разместили комментарии». Ну, вот что вы просите:

 Comment.objects.filter(
    content_type_id=foo, object_pk=bar
 ).values_list('user_id', flat=True).distinct()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...