2015-05-17 2 views
0

Я создал базовую модель BranchComment (то есть: систему комментариев с потоком), которая имеет два возможных атрибута внешнего ключа. Один атрибут внешнего ключа относится к модели PageInfo, если это родительский комментарий на чужой странице (то есть: новое сообщение) и другой атрибут внешнего ключа, если комментарий является ответом на другой комментарий, и в этом случае второй внешний ключ установлен на один фактических объектов BranchComment, указывая, на какой комментарий это ответ. Таким образом, комментарии могут быть бесконечно привязаны друг к другу и/или использоваться в качестве основного нового сообщения на странице.Django: Как перебирать потоковые комментарии внутри шаблона?

Вот модель:

class BranchComment(models.Model): 
    childtag = models.ForeignKey('self', related_name='child', null=True, blank=True) 
    commentcontent = models.CharField(max_length=5000) 
    parenttag = models.ForeignKey('PageInfo', related_name='parent', null=True, blank=True) 
    commentdate = models.DateTimeField(auto_now_add=True) 
    usercommenttag = models.ForeignKey(User, null=True, blank=True) #who posted the comment 

    def __unicode__(self): 
     return self.commentcontent 

Очевидно, что вы можете получить все новые сообщения на странице с помощью основной:

newposts = BranchComment.objects.filter(parenttag=PageInfo_instance) 

Тогда я могу цикл по каждому parentcomment в QuerySet и получить связанные с этим:

for post in newposts: 
    replies = BranchComment.objects.filter(childtag=post).order_by('-commentdate') 

Итак, теперь мой вопрос в том, что у меня хороший запрос f все исходные записи (то есть: оригинальные сообщения) и хороший набор запросов упорядоченных ответов для каждого сообщения, но как я могу сопоставить их друг с другом в файле шаблона? Спасибо за любой совет.

ответ

2
for post in newposts: 
    replies = BranchComment.objects.filter(childtag=post).order_by('-commentdate') 

replies будет BranchComment объектов с childtag=post из последнихpost в newposts.

Некоторые идеи:

replies = BranchComment.objects.filter(id__in=newposts).order_by('-commentdate') 

В шаблонах вы можете получить доступ к связанным объектам, например reply.childtag или всех детей newpost как это: newpost.child. И, например, сравните их:

{% if newpost == reply.childtag %}...{% endif %} 

Не могли бы вы предоставить более подробную информацию, пожалуйста? Благодаря!

+0

Нет дополнительной информации, чтобы обеспечить ха-ха, я просто хочу, чтобы вы могли показывать все ответы комментариев и ответов на ответы и т. Д. Аккуратно на шаблоне. Что именно делает BranchComment.objects.filter (id__in = newposts) .order_by ('- commentdate') и где его следует вставить в код? – EazyC

+0

Я понимаю, что вы имеете в виду сейчас. Но тогда мой ответ бесполезен. Вам нужно что-то вроде 'django-threadscomments'. – f43d65

+0

Я посмотрел на это, но я хотел бы закодировать свой собственный, чтобы лучше понять, что происходит. – EazyC