Джанго комментирует обратную связь - PullRequest
2 голосов
/ 17 июня 2009

При использовании django.contrib.comments есть ли способ добавить обратную связь к модели, имеющей комментарии?

Например:

post = Post.objects.all()[0]
comments = post.comments.all()

Ответы [ 2 ]

5 голосов
/ 17 июня 2009

Да, вы должны быть в состоянии сделать:

from django.contrib.contenttypes import generic
class Post(models.Model):
    ...
    comments = generic.GenericRelation(Comments)

согласно документации Django на обратные родовые отношения

1 голос
/ 17 июня 2009

Я придумал другой способ сделать это (почему? Потому что я не знал ни о каком другом способе сделать это время). Он опирается на наличие класса абстрактных моделей, из которого получены все модели в системе. Сама абстрактная модель имеет определенный метод comments, который при вызове возвращает QuerySet всех объектов комментариев, связанных с соответствующим конкретным объектом. Я реализовал это так:

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.comments.models import Comment

class AbstractModel(models.Model):

    def comments(self):
        """Return all comment objects for the instance."""
        ct = ContentType.objects.get(model=self.__class__.__name__)
        return Comment.objects.filter(content_type=ct,
                                    object_pk=self.id)

    class Meta:
        abstract = True
...