問題タブ [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.

0 投票する
1 に答える
3871 参照

django - Django-mpttと複数の親?

私はこの問題について数週間机に頭をぶつけてきたので、助けを求める時が来たのではないかと思います。

アセンブリのパーツの階層データを持つデータベース構造を実装しようとしています。私の主な問題は、ある「サブアセンブリ」を別の「アセンブリ」/ツリーに割り当てようとすることです。以下のツリーの例を参照してください-アセンブリ1と2の作成と操作に問題はありませんが、アセンブリ3を作成すると、サブアセンブリを呼び出すときに複数のオブジェクトがエラーを返します(これは私が行っている方法に基づいて理解しています)試行)。

これが私が試したモデルです:

つまり、基本的に私は非常に基本的なツリーを作成し、パートFKを介してより詳細なデータにリンクしています。アセンブリをクエリしてその子孫を確認できる必要があります。そのため、アセンブリ3を呼び出すことはできますが、複数のツリーに存在する子を呼び出すことはできません。

私が行っていることでは、ツリーの任意のポイントから、下がるのは常に同じです。つまり、1.2は常に1.2.1の子を持ちますが、上がるは変わる可能性があります。つまり、1.2は1の親を持つことができます。または3。

問題は、Assembly.parentを1つの値に制限するため、ForeignKeyにすることです。いくつかの解決策や試すべきことについて何かアイデアはありますか?

追加のコードを確認したり、質問したりする場合は、お知らせください。これは明確に説明しようとするのが難しい主題のようです!ありがとう

- - 編集 - -

有向非巡回グラフ(DAG)モデルが必要であることがわかりました。

具体的な解決策はまだありませんが、それを理解したり、DAGに質問したりするときは、ここにリンクを投稿しようと思います。


----編集2----

django-treebeard-dag

django-dag

私はこれらの2つの非常に小さなプロジェクトを見つけました。私はもともと「木の髭」バージョンで作業していましたが、プロジェクトのためにdjango-dagに切り替えました。基本的な使用法について質問がある場合は、PMまでお気軽にご連絡ください。サポートできるかどうかを確認します。

0 投票する
3 に答える
1542 参照

django - 選択した親に応じて子ノードを表示

こんにちは、私はずっと探していましたが、これに対する答えが見つかりません。私は python/django の使用経験が 3 か月しかないので、ダミーの質問で失礼します。django mptt を使用して、単純なネストされたセット ナビゲーションを表示しています。

これは問題なく動作しますが、すべてではなく、選択したカテゴリ (スラッグに基づく) の子のみを表示したいと考えています。何か案は ???


私は最終的にこのようにしました:

ビューで

しかし、それはハックです。誰かがより良い考えを持っていますか?

0 投票する
4 に答える
3059 参照

django - 編集後にモデル インスタンスを保存できないのはなぜですか?

問題なくインスタンス化できるモデルがありますが、一度作成すると、それを保存しようとすると、主キーが一意でなければならないという IntegrityError が発生します。何が原因ですか?

Node から継承する他のモデルがあり、同じ問題が発生しています。

これが私のモデルです:

生成される SQL は次のとおりです。

既存のモデル インスタンスを保存しようとすると、次のようになります。

これが実行するクエリは次のとおりです。

作成済みのインスタンスを再保存しているときに、main_book に挿入しようとするのはなぜですか?

0 投票する
1 に答える
371 参照

django - メールヘッダー情報を使用したdjangoのメールスレッドの並べ替え

メールスレッドを保存するdjangoアプリがあります。mboxから元のメールを解析してデータベースに挿入するときは、メールヘッダーパラメーター「message-id」と「in-reply-to」を含めます。message-idはメッセージを識別する一意の文字列であり、in-reply-toは特定のメッセージが応答しているメッセージを識別します。

これが私のモデルのメッセージ部分です:

目標は、Gmailに似たスレッド形式でメールの会話を表示できるようにすることです。メールヘッダーからのmessage-id(モデルではmesg_id)とin-reply-to(モデルではin_reply_to)を使用して、メールを追跡し、スレッド化することを計画していました。

SOとgoogleを確認した後、これを行うにはdjango-treebeardやdjango-mpttなどのライブラリを使用する必要があるようです。これら2つのソリューションのいずれかのドキュメントを確認すると、ほとんどのモデルが外部キーの関係を使用しているように見え、これで混乱します。

上記のモデルの例を考えると、アプリにdjango-treebeardまたはdjango-mpttを実装するにはどうすればよいですか?これは、mesg_idフィールドとin_reply_toフィールドを使用して可能ですか?

0 投票する
2 に答える
3897 参照

python - mptt クエリセットの祖先のクエリセットを取得する効率的な関数

mptt クエリセットのすべての先祖を取得するための効率的なアルゴリズムを持っている人はいますか? これまでのところ、私が考えることができる最高のものは次のようなものです:

このアプローチには 2 つの問題があります。

  1. 隣り合っていないブランチがあると失敗します (つまり、実際には機能しません)。
  2. 最終的なクエリに句が含まれてしまうため、非常に非効率的でnumber_of_trees*number_of_levelsあり、非常に高速に巨大化する可能性があります

祖先を別の場所にキャッシュすることにオープンですが、効率的に行う方法が思いつきません。先祖のIDのコンマ区切りリストを含むフィールドを追加してから、GROUP_CONCAT(私はMySQLにいます)エクストラ内で実行することを検討しましたが、それは巨大/遅くなる可能性があると思います.

0 投票する
2 に答える
1722 参照

django-queryset - Django-MPTT - 直接の子孫の数でルート ノードを並べ替える

Django-MPTT を使用して、単純な 2 レベルの階層 (root => child(ren)) を表示しています。ノードが返されるようにクエリセットを構築する方法を探しています。これにより、最初に最も多くの子を持つルート ノードが返され、最後に (存在する場合) 最小の子を持つノードが返されます。

0 投票する
1 に答える
1727 参照

django - DjangoMPTT-カテゴリの絶対URL

私は次のツリー構造を持っています:

django-mpttを使用すると、1つのクエリを使用してこの情報を表示できます。これはすばらしいことですが、次のようなURLを作成しようとすると次のようになります。

ツリー内の各カテゴリに対してSQLルックアップを実行して、親ノードのスラッグを取得します(これは理解できます)。コードは次のとおりです。

SQLに夢中になることなくURLスラッグを作成できるMPTTの機能はありますか?

0 投票する
1 に答える
1086 参照

django - Django FlatPages を拡張して MPTT を使用する

序文: 私は、MPTT とカスタム ページ モデルを使用する独自のページ アプリを作成していました。これは私にとってはうまくいきましたが、FlatPages は私のカスタム ページ モデルよりも洗練されているため、単に拡張することに傾いています。

これは、実行時にエラーがスローされることを除いて、ほとんど機能しますpython manage.py syncdb

エラー:

誰かが私を正しい方向に向けることができれば、とても感謝しています。ありがとう!

0 投票する
2 に答える
1719 参照

django - 各挿入後に再構築せずにdjango-mpttツリーを構築するには?

大きなmpttツリーを構築しています。すべてのノードを挿入した後、ツリー全体を再構築するためのメソッドを開始します。

各挿入後にツリーを再構築しないようにするにはどうすればよいですか?

メソッドで廃止されたキーワードのみが見つかりました.save

以前のバージョンでは、MPTTModel.save() に生のキーワード引数がありました。True の場合、MPTT フィールドは保存中に更新されません。この (文書化されていない) 引数は削除されました。

0 投票する
1 に答える
1921 参照

django - Django 複数のキャッシュ バックエンド

1 つの django プロジェクトで複数のキャッシング エンジンを使用したいと考えています。例では、モデル画像のサムネイルを取得/設定するために多くのSQLクエリを生成するsorl.thumbnailを使用しています。このクエリをキャッシュするために、memcached バックエンドを使用します。しかし、他のキャッシュは機能しなくなりました。つまり、 を使用したテンプレート キャッシングと{% cache ... %}、API cache.get()、cache.set() を介したキャッシングを意味します。こんなものになりたい

}

テンプレートで「ファイルベース」のキャッシュを使用するにはどうすればよいですか? {% cache %} は memcached バックエンドを使用し、特にツリー (django-mptt) を使用して多くのクエリを生成するためです。