問題タブ [django-mptt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python / Djangoでの階層(親/子)データの保存:MPTTの代替?
Djangoで階層(親/子)データを保存して使用するための良い方法を探しています。私はdjango-mpttを使用していますが、脳とは完全に互換性がないようです-主にツリー内で物事を移動するときに、非自明な場所で非自明なバグが発生します:一貫性のない状態になります。ノードとその親は、それらの関係について意見が一致しません。
私のニーズは単純です:
- 与えられたノード:
- そのルートを見つける
- その祖先を見つける
- その子孫を見つける
- 木で:
- ノードを簡単に移動する(つまり、親を変更する)
私のツリーは小さくなります(20レベルを超える最大10kノード、通常ははるかに小さく、たとえば1または2レベルの10ノード)。
python/djangoでツリーを作成するもっと簡単な方法が必要だと思います。一貫性を維持するためのより良い仕事をする他のアプローチはありますか?
django - django-mpttフィールドが2回表示され、SQLが壊れる
私は django-mptt を使用して、Page
次のようなモデルを持つ単純な CMS を管理しています (おそらく無関係なフィールドは削除されています)。
削除されたフィールドはattachments
、headline_image
、nav_override
、およびpublished
SQLite を使用するとすべて正常に動作しますが、MySQL を使用し、admin を使用して (または ModelForms とsave()
メソッドを使用して) ページを追加しようとすると、次のようになります。
生成される SQL は次のとおりです。
何らかの理由で、django-mptt フィールド ( lft
、rght
、tree_id
およびlevel
) を 2 回取得しています。おそらく、SQLite は MySQL よりも許容範囲が広いため、SQLite で動作します。
get_all_field_names()
また、それらを2回示します。
おそらくこれが、SQLが悪い理由です。これらのフィールドが に 2 回表示されるようにするにはどうすればよいでしょうget_all_field_names()
か?
django - django-mpttを使用するモデルのsave()メソッドをオーバーライドする
私はプロジェクトでdjango-mpttをしばらく使用していますが、すばらしいです。最近、mpttを使用するモデルのsave()メソッドをオーバーライドする必要があることがわかりました。そのモデルの新しいインスタンスを保存しようとすると、エラーが発生します。
これは、インスタンスがまだツリーにスタックされていないという事実の結果であると思いますが、これを修正する方法がわかりません。プロジェクトのトラッカーの同様の問題にコメントを追加しましたが、ここの誰かが私をより早く正しい軌道に乗せることができるかもしれないと期待していました。
これがトレースバックです。
python - django-mptt:ノードを正常に移動する方法
django-mpttは、私を頭から追い出そうと決心しているようです。私は比較的単純なことをしようとしています。ノードを削除し、ノードの子に対して合理的なことをする必要があります。つまり、現在の親の子になるように、1つ上のレベルに移動したいと思います。
つまり、ツリーが次のようになっている場合:
父を削除し、C1とC2をおじいちゃんの子にします。
これが私が使用しているコードです:
だから私は呼ぶだろう:
これは機能します-ほとんど。子供たちは両親をおじいちゃんとして報告します:
おじいちゃんはその子供たちの間でC1とC2を数えます
しかし、ルートはこれらの子供たちを否認します。
子供たちを動かして、彼らの根が壊れないようにするにはどうすればよいですか?
django - django-mptt&django 1.2
django-mpttのホームページから
バージョン0.2.1はDjango1.0以降と互換性がありません-今のところSVNトランクを使用してください
すぐに稼働する仕事にはトランクを使わない傾向がありますが、急いで仕事をしています。
Django 1.2で動作しますか(「helloworld」に相当するものを超えて)誰かが現在の経験/共有する奇妙なバグなどを持っていますか?
django - Django: 階層 URL
Django で階層 URL をどのように処理しますか? そのためのベストプラクティスはありますか? 例えば。/blog/category1/category2/myblogentry
(django-mptt などを使用して)のような URL がある場合、事前にチェックを行うかurls.py
、ビューへのパス全体を指定して、有効なカテゴリであるかどうかすべての部分をチェックさせてください。それほど難しくはないように思えますが、誰かがベスト プラクティスを推奨したり、優れた (一般的な) ソリューションを示したりできるか知りたいですか?
django - django mpttのフルツリーリストに外部キーカウントを含めますか?
私は次のようにカテゴリツリーを吐き出しています:
<span class="count">13</span>
ただし、バグには複数のカテゴリが関連付けられている可能性があるため、カテゴリごとに関連付けられているバグの量の内部カテゴリ (第 3 レベルから始まるのでしょうか?)も生成したいと考えています。
ネストされた for ループ内にこのスニペットのようなものが必要だと考えていますが、その方法がよくわかりません。
参照用の私のモデルは次のとおりです。
したがって、現在の出力は次のとおりです。
そして理想:
python - django-mptt の子の選択は localhost では機能しますが、サーバーでは機能しません
localhost とサーバー (mercurial のおかげ) で同じコードを使用していますが、動作が少し異なります。このコードを使用して、テンプレートでカテゴリとそのサブカテゴリをレンダリングしたい:
ビュー.py:
テンプレート:
ただし、このコードは localhost で完全に機能します (サブカテゴリは正しくレンダリングされます) - サーバーでは機能せず、{{ subcats|length }}は 0 を返します。localhost とサーバーの MySQL ベースの値を比較しました - それらは正しいです継承が機能するはずです。最もおもしろいのは、同じクエリがサーバー上のmanage.py シェルで完全に機能することです。
ハックの何が問題なのですか?
django - django-mpttを使用してFeinCMSページツリーのコピーを作成すると、子の順序が変更されます
django-mpttを使用して管理されているFeinCMSページツリーのコピーを作成しようとしています。私はこの関数を書きました:
を使用してそれを呼び出します
一般的には機能しますが、次のようなページツリーがある場合:
それは次のように出てきます:
mpttコードをステップスルーすると、魔法はmptt / managers.py / _inter_tree_move_and_close_gap()で発生しているように見えます。ここで、何らかの理由で孫の「lft」値が変更されます。移動前はC=3、D = 5、その後はC = 5、D=3です。
これは、DがCの前にソートされる理由を説明していますが、これらの値が切り替わる理由がわかりません。何かご意見は?
python - Django:単純な階層化のための最良の方法は?
私はこのモデルを持っています:
Djangoに、階層に関してカテゴリを並べ替えてもらいたいのですが、次に例を示します。
- 親1
- 子供1
- 親2
- 子供1
調査を行ったところ、treebeard.al_treeとDjango MPTTの2つのアプリが強力であるため、パフォーマンスが低下したり、保守が困難になったりする可能性があります。
ウェブサイトのサイドバーと管理ページ内(投稿モデルにForeignKeyを含む)にカテゴリを表示します。カテゴリへの追加/変更/削除は非常に少なく、ほとんどの場合、パフォーマンスに大きな影響を与えない読み取り専用です。
これを提供し、上記のものよりも簡単な他のアプリはありますか?追加のアプリなしで、マネージャーなどを使用してDjangoを使用してこれを達成できますか?