Как получить (если возможно) порядок набора запросов по родительской записи и всем дочерним записям и т. Д.? - PullRequest
0 голосов
/ 20 мая 2011

Я не знаю, правильно ли я описывал вещи в заголовке, поэтому постараюсь сделать это лучше здесь,

Допустим, я создаю систему форума и что у меня есть модель Post, в которой, помимо других полей, есть внешний ключ для модели Thread и внешний ключ для себя, то есть с именем parent_post, так что люди будут возможность публиковать ответы на другие сообщения или создавать новые сообщения для каждой темы.

Все отлично работает. То, чего я не знаю и не могу найти, - это как отображать сообщения по порядку, когда я хочу показать все сообщения для темы ....

Например:

Thread x:

post a .....
       response to post a .....
       response number 2 to post a .....
post b ....
post c ....
       response to post c .....
       response 2 to post c .....

и так далее ......

Я знаю, как это сделать на чистом SQL, и я также знаю, что могу вернуть все сообщения о потоках и настроить их в порядке с JS, но должен быть способ сделать это способом django: -)

Спасибо, Эрез

Ответы [ 3 ]

1 голос
/ 20 мая 2011

Вы должны установить ordering = ['id',] или ordering = ['timestamp',] в своей модели Post.

Когда вы сделаете запрос posts = Post.models.filter(thread=x), все сообщения будут упорядочены по 'id' или 'timestamp' полямИ когда вы сделаете posts[a].response_set.all(), вы получите все ответы, которые заказаны в соответствии с вашими настройками в модели Meta class.

PS: извините за мой английский

1 голос
/ 20 мая 2011

Полагаю, ваша модель выглядит следующим образом:

class Post(Model):
    ....
    thread = ForeignKey(Thread)
    post = ForeignKey('self')
    posttime = DateTimeField(auto_now_add=True)

Вы получите все сообщения матери, принадлежащие теме ...

mothers = Post.objects.filter(thread=x, post__isnull=True)

post__isnull = True будет фильтровать сообщения, которые не ссылаются на себя, что означает, что они являются сообщениями, которые начинают тему ...

Затем получают сообщения, принадлежащие одной теме, и упорядочивают их ...

mother-post = mothers[0]
childs = Post.objects.filter(post=mother-post).order_by('posttime')

Но, вероятно, упорядочение по id (по умолчанию) также решает вашу проблему, поэтому вам может не потребоваться order_by .

ОБНОВЛЕНИЕ:

Да, вы можете это сделатьв одном запросе, например, для сообщения с id = 12323,

Posts.objects.filter(Q(pk=12323) | Q(post__id=12323))

Ссылка на документацию ... Это будет делать то, что вам нужно.

0 голосов
/ 20 мая 2011

почему бы не взглянуть на http://www.djangopackages.com/grids/g/forums/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...