Django получить все комментарии для пользователя - PullRequest
0 голосов
/ 14 марта 2011

Я использую профили django и django.contrib.comments и пытаюсь отобразить все комментарии для определенного пользователя в своем профиле.

Используется стандартное представление profile_detail из профилей django.

Я пробовал эти два подхода, и ни один из них не возвращает никаких объектов (хотя объекты, соответствующие этому запросу, существуют):

{% for comment in profile.user.comment_set.all %}

и

{% for comment in profile.user.user_comments.all %}

В исходном коде для django.contrib.comments внешний ключ для пользователя в модели Comment имеет следующее связанное имя:

user = models.ForeignKey(User, verbose_name=_('user'),
                    blank=True, null=True, related_name="%(class)s_comments")

В комментариях также есть собственный менеджер:

# Manager
    objects = CommentManager()

Что определяется как:

class CommentManager(models.Manager):

    def in_moderation(self):
        """
        QuerySet for all comments currently in the moderation queue.
            """
        return self.get_query_set().filter(is_public=False, is_removed=False)

    def for_model(self, model):
        """
        QuerySet for all comments for a particular model (either an instance or
        a class).
        """
        ct = ContentType.objects.get_for_model(model)
        qs = self.get_query_set().filter(content_type=ct)
        if isinstance(model, models.Model):
            qs = qs.filter(object_pk=force_unicode(model._get_pk_val()))
        return qs

Является ли пользовательский менеджер причиной того, что запрос .all ничего не возвращает? Правильно ли я обращаюсь к обратному отношению? Любая помощь будет оценена.

1 Ответ

0 голосов
/ 14 марта 2011

Связанное имя определено, поэтому значение по умолчанию name_set не будет работать.Цель related_name состоит в том, чтобы переопределить это имя обратного менеджера по умолчанию.

 user = models.ForeignKey(User, verbose_name=_('user'),
                blank=True, null=True, related_name="%(class)s_comments")

Поэтому используйте это:

user.comment_comments.all()
...