2009-12-22 5 views
0

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

comment <--top 
    comment <-- comment "A" 
    comment <-- comment "B" 
    comment <-- comment "C" 
    comment <--C-1, reply to comment "C" 
     comment <-- C-1-1, reply to comment "C-1" 
     comment 
      comment 
      comment 
     comment <-- C-1-1-1 reply to C-1-1 
     comment 
     comment 
      comment 
      comment 
    comment 
    comment 
     comment 
     comment 
      comment 
      comment 
      comment 
      comment 

Идея заключается в том, что ответы на комментарий будет чучела один уровень под ним, и каждый комментарий, за исключением самого первого комментария, имеет родителя. Дело в том, что, хотя я понимаю идею реализации обходов дерева, ни одна из книг/статей, которые я прочитал по этому вопросу, не учитывает Django (или шаблон MVC, если на то пошло), поэтому мой вопрос: как я буду заниматься внедрение этой системы в Django? (Вот код модели у меня есть для справки: - /)

class Comment(models.Model): 
Parent = models.OneToOneField('self', null=True) 
Children = models.ForeignKey('self', null=True) 

Author = models.ForeignKey(User) 
     Author_IP = models.IPAddressField() 
Created_On = models.DateTimeField(auto_now_add=True) 
Modified_On = models.DateTimeField(auto_now=True) 
Body = models.TextField() 
+0

Поиск в архивах вы можете найти много ответов. http://stackoverflow.com/search?q=django+tree –

ответ

2

Посмотрите на django-threadedcomments. Его цель более пригодна для использования в качестве комментариев к блогу, чем полнофункциональный форум, но если это не подходит вашему делу, вы можете по крайней мере посмотреть на исходный код и изучить пару вещей из него.

Насколько идет на основе дерева структуры, есть три проекта, я в курсе для ОРМ Джанго: django-mptt (это один имеет самую большую «долю рынка» с 3 партии Джанго приложений постоянно AFAIK), django-treebeard и easytree (который основан на treebeard). Easytree поставляется с приятным админ-интерфейсом, но в двух других проектах есть, по крайней мере, исправления в своих трекерах по проблеме, чтобы добавить интерфейс администратора (не уверен, что они уже интегрировали эти исправления).

1

Я бы только определить родитель и дать ему родственное имя

class Comment(models.Model): 
    parent=models.ForeignKey('self', related_name="children", null=True, blank=True) 
    #other fields 

Тогда вы могли бы получить его ребенок

comment=Comment.objects.get(id=1) 
children=comment.children.all() 

for child in children: 
    morechildren=child.children.all() 
+0

Значит, поле «Дети», которое я определил, больше не требуется? – cornjuliox

Смежные вопросы