Косяк в django-mptt?

46 views
Skip to first unread message

Иван Земцов

unread,
Dec 7, 2011, 3:58:04 AM12/7/11
to google groups
Привет всем!

In [1]: from test1.models import Genre

In [2]: rock = Genre.objects.create(name="Rock")

In [3]: blues = Genre.objects.create(name="Blues")

In [4]: hard_rock=Genre.objects.create(name="Hard Rock", parent=rock)

Получаю
  • Blues
    • Hard Rock
  • Rock
В базе
Развернутое отображение данных id name parent_id lft rght tree_id level
Изменить Удалить 17Hard Rock 15 2 3 1 1
Изменить Удалить 16Blues NULL 1 4 1 0
Изменить Удалить 15Rock NULL 1 2 2 0


Что скажите?
--
С уважением, Иван

Serge Matveenko

unread,
Dec 7, 2011, 4:08:02 AM12/7/11
to django-...@googlegroups.com
On Wed, Dec 7, 2011 at 12:58, Иван Земцов <inz...@gmail.com> wrote:
>
> Что скажите?

По базе все правильно. Видимо выводите не обращая внимания кто чей родитель.


--
Serge Matveenko
se...@matveenko.ru
http://www.ohloh.net/accounts/lig
http://ru.linkedin.com/in/sergematveenko

Yuri Baburov

unread,
Dec 7, 2011, 4:13:05 AM12/7/11
to django-...@googlegroups.com
А как выводишь?
--
Best regards, Yuri V. Baburov, Skype: yuri.baburov, MSN: bu...@live.com

pooh

unread,
Dec 7, 2011, 4:48:43 AM12/7/11
to django-...@googlegroups.com
В Срд, 07/12/2011 в 13:08 +0400, Serge Matveenko пишет:

> On Wed, Dec 7, 2011 at 12:58, Иван Земцов <inz...@gmail.com> wrote:
> >
> > Что скажите?
>
> По базе все правильно. Видимо выводите не обращая внимания кто чей родитель.
>

В базе как раз не нормально, обратите внимание на tree_id. Правда
причину этого я из приведенного предположить не могу.
--
С уважением Олег.

Serge Matveenko

unread,
Dec 7, 2011, 4:56:26 AM12/7/11
to django-...@googlegroups.com
2011/12/7 pooh <oko...@gmail.com>:

> В базе как раз не нормально, обратите внимание на tree_id. Правда
> причину этого я из приведенного предположить не могу.

Да, вижу, что в базе два отдельных дерева:
1. Hard Rock, Blues
2. Rock

При этом parent_id показывает не на того, на кого казалось бы должен
по данным lft, rght и tree_id, но на того, на кого должен по логике
кода.

P.S.: кстати, примерно так надо было описать проблему, а не "что
скажите?", что не только не информативно, но еще и с ошибкой.

Serge Matveenko

unread,
Dec 7, 2011, 4:58:33 AM12/7/11
to django-...@googlegroups.com
On Wed, Dec 7, 2011 at 12:58, Иван Земцов <inz...@gmail.com> wrote:
> Что скажите?

у вас в модели точно написано "parent = TreeForeignKey..."? А то вдруг
"parent = ForeignKey...".

Иван Земцов

unread,
Dec 7, 2011, 5:09:58 AM12/7/11
to django-...@googlegroups.com
Делал все по мануалу.
model:
class Genre(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

view:
def show_genres(request):
    return render_to_response("genres.html",
                          {'nodes':Genre.objects.all()},
                          context_instance=RequestContext(request))

template:
{% load mptt_tags %}
<ul>
    {% recursetree nodes %}
        <li>
            {{ node.name }}
            {% if not node.is_leaf_node %}
                <ul class="children">
                    {{ children }}
                </ul>
            {% endif %}
        </li>
    {% endrecursetree %}
</ul>

In [4]: hard_rock=Genre.objects.create(name="Hard Rock", parent=rock)
Я же привязываю к rock, почему у hard_rock id=1 ?


7 декабря 2011 г. 13:58 пользователь Serge Matveenko <se...@matveenko.ru> написал:



--
С уважением, Иван

Иван Земцов

unread,
Dec 7, 2011, 5:11:49 AM12/7/11
to django-...@googlegroups.com
В догонку весь тестовый проект

2011/12/7 Иван Земцов <inz...@gmail.com>



--
С уважением, Иван
mymptt.tgz

Иван Земцов

unread,
Dec 7, 2011, 5:13:03 AM12/7/11
to django-...@googlegroups.com
поправка не id=1, а tree_id=1

2011/12/7 Иван Земцов <inz...@gmail.com>

In [4]: hard_rock=Genre.objects.create(name="Hard Rock", parent=rock)
Я же привязываю к rock, почему у hard_rock id=1 ?



--
С уважением, Иван

Иван Земцов

unread,
Dec 8, 2011, 1:58:26 AM12/8/11
to django-...@googlegroups.com
может кто-нибудь показать как перемещать узлы в пределах одного и разных деревьев?

7 декабря 2011 г. 14:13 пользователь Иван Земцов <inz...@gmail.com> написал:



--
С уважением, Иван

Serge Matveenko

unread,
Dec 8, 2011, 4:03:11 AM12/8/11
to django-...@googlegroups.com
2011/12/8 Иван Земцов <inz...@gmail.com>:

> может кто-нибудь показать как перемещать узлы в пределах одного и разных
> деревьев?

http://en.wikipedia.org/wiki/Nested_set_model

http://www.getinfo.ru/article610.html

научитесь уже гуглу. и английскому языку.

ваш запрос по данной теме: "nested sets"

Иван Земцов

unread,
Dec 8, 2011, 5:06:00 AM12/8/11
to django-...@googlegroups.com
А методами django-mptt ?

8 декабря 2011 г. 13:03 пользователь Serge Matveenko <se...@matveenko.ru> написал:



--
С уважением, Иван

Vovk Donets

unread,
Dec 8, 2011, 5:12:25 AM12/8/11
to django-...@googlegroups.com

http://stackoverflow.com/questions/2324727/re-ordering-child-nodes-in-django-mptt

8 декабря 2011 г. 17:06 пользователь Иван Земцов <inz...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages