Я создал базовую модель 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 все исходные записи (то есть: оригинальные сообщения) и хороший набор запросов упорядоченных ответов для каждого сообщения, но как я могу сопоставить их друг с другом в файле шаблона? Спасибо за любой совет.
Нет дополнительной информации, чтобы обеспечить ха-ха, я просто хочу, чтобы вы могли показывать все ответы комментариев и ответов на ответы и т. Д. Аккуратно на шаблоне. Что именно делает BranchComment.objects.filter (id__in = newposts) .order_by ('- commentdate') и где его следует вставить в код? – EazyC
Я понимаю, что вы имеете в виду сейчас. Но тогда мой ответ бесполезен. Вам нужно что-то вроде 'django-threadscomments'. – f43d65
Я посмотрел на это, но я хотел бы закодировать свой собственный, чтобы лучше понять, что происходит. – EazyC