問題タブ [generic-foreign-key]
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.
django - 削除時に GenericForeignKey がカスケードしないのはなぜですか?
contenttypes GenericForeignKey を使用して、任意のモデルにコメントを添付できるカスタム コメント システムを作成しています。
コメントが添付されているモデルが削除されると、削除がカスケードされてコメントも削除されることを理解しています。
残念ながら、これは起こっておらず、私は困惑しています。デフォルトの削除動作が変更される一般的な理由はありますか?
django - Django/South HOWTO では、DataMigration 中に別のアプリからモデルのインスタンスを作成します
アプリQuestionでモデルAnswerのデータ移行を実行する必要があります。そのスクリプトには、アプリJournalにあるモデルChapterのインスタンスを作成する必要があるような依存関係があります。ということで、以下のようにコーディングしました。
しかし、予想通り、これは " orm['journal.Chapter'].objects.get_or_create(content_object=blog)" でエラーをスローします。
これはおそらく content_object が GenericForeignKey であるため、一部の操作が許可されていないためです。しかし、次のような「チャプター」オブジェクトを作成するための他の方法も試しました。
と
それで、どこが間違っているのですか?任意のポインタをいただければ幸いです。ありがとう。
アップデート
そのため、以前のアプローチが失敗していたので、新しい方法を試しました。上記のコード、つまりJournalアプリのChapterでインスタンス化が失敗していたモデルは、代わりにそのためのデータ移行を作成することにしました。また、定義で参照しているモデルも確認しました。今、これは簡単なことだったはずです。私は次のように転送コードを持っています ---freeze
forwards
問題のアプリ ( Journal ) に存在するモデル ( Chapter )のインスタンスを作成しているので、すべてがうまくいくはずだと思っていたでしょう。しかし、私は同じエラーが発生しています。
同じポイント、つまり「content_object」で失敗します。それが役立つ場合は、モデル定義の下に投稿します。
更新 2 これらの forwards メソッド、つまり、ブログ、章、質問で触れられているすべてのモデルを追加したかった。South の schemamigration によって作成された 00n_*.py ファイルで完全に定義されています。
django - django GenericForeignkey は object.create() では機能しませんが、save() では正常に機能します
データベースをpostgresからmysqlに移行しようとしています。以下は、モデル Customdata です。
以下のスニペットを使用してエントリを作成すると、GenericForeignKey フィールドの「参照」が更新されないという問題に直面します。残りのすべての値は完全に問題ありません。
しかし、作成後に update を実行すると、値が保存されます。
create を使用して「参照」フィールドが保存されていない理由がわかりませんが、再度更新すると正常に動作します。このコードは、postgres で正常に動作するために使用されます。
django - DjangoでGenericForeignKeyに自然キーを使用することは可能ですか?
私は次のものを持っています:
dumpdata --naturalで、この関係の自然キーを出力したいと思います。これは可能ですか?そうでない場合、ターゲットの主キーに私を結び付けない代替戦略はありますか?
database - Djangoの一般的な外部キーフィールドは、構築中に割り当てられませんが、構築後に割り当てることができます
コンストラクターを使用してジェネリックフィールドを割り当てた場合にジェネリックフィールドが固定されない、Djangoジェネリック外部キーに奇妙な問題があります。それは建設後にのみ固執します。これに関する情報が見つからないので、これについて新しい質問を作成しています。なぜこれが起こっているのか考えはありますか?
以下は私のクラスです
これが問題を示す私のシェルセッションです:
django - django:GenericForeignKey のフィールドに基づいてクエリを実行するにはどうすればよいですか?
GenericForeignKey を使用するのは初めてで、クエリ ステートメントで機能させることができませんでした。表はおおよそ次のようなものです。
スキャンは 1 つの問題を作成し、問題はいくつかのチケットを生成し、チケット テーブルへの外部キーとして問題を作成しました。Scan オブジェクトができたので、このスキャンに関連するすべてのチケットを照会したいと考えています。私はこれを最初に試しました:
これは機能しません。それから私はこれを試しました:
それでもうまくいきません。django でこれらの種類のクエリを実行する方法を知る必要がありますか? ありがとう。
django - GenericForeignKey を削除する Django
このチュートリアルに従って、アクティビティ フィードを実装しようとしています。
対応するオブジェクト、つまりコメント自体が削除されたときに、アクティビティ (つまり、コメントが追加された) を削除したいと考えています。これはカスケードしていないようです。
GenericRelation を追加せずにこれを達成する方法はありますか? postdelete シグナルを使用して、対応するアクティビティを削除することができます。それが最善の方法ですか?
django - 複数のデータベース用の Django GenericTabularInline
GenericTabularInline クラスを、Django ドキュメント (https://docs.djangoproject.com /en/dev/topics/db/multi-db/) ですが、子モデルがインライン フォームで編集されている場合は、常に既定のデータベースに書き込みます (2 番目の管理者にセカンダリ データベースのみを処理してもらいたいのですが、モデルはどちらも同じです)、そのため、一部のメソッドをオーバーライドしたり、何か間違ったことを行ったりしてはなりません。これが私がこれまでに持っているクラスです:
ヘルプやヒントをいただければ幸いです。
django - django:GenericForeignKeyの関連オブジェクトをプリフェッチします
インスタンスまたはインスタンスのいずれかを指すモデルBox
があるとします。とは、それぞれtoとForeignKeysを持っています。アクセスする必要のあるesのリストを表示したい。できるだけ少ないDBクエリでこれを行うにはどうすればよいですか?GenericForeignKey
Apple
Chocolate
Apple
Chocolate
Farm
Factory
Box
Farm
Factory
最小限の実例:
これが私が試したいくつかのことです。これらすべての例で、Nはボックスの数です。ContentType
クエリカウントは、Apple
とChocolate
がすでにキャッシュされていることを前提としているため、get_for_model()
呼び出しはDBにヒットしません。
1)ナイーブ:
print [box for box in Box.objects.all()]
これは、 1(ボックスをフェッチ)+ N(ボックスごとにAppleまたはChocolateをフェッチ)+ N (AppleごとにFarmをフェッチし、ChocolateごとにFactoryをフェッチ)クエリを実行します。
2)はであるselect_related
ため、ここでは役に立ちません。Box.content_object
GenericForeignKey
3)django 1.4以降、 sprefetch_related
をフェッチできGenericForeignKey
ます。
print [box for box in Box.objects.prefetch_related('content_object').all()]
これは、 1(ボックスをフェッチ)+ 2(すべてのボックスのアップルとチョコレートをフェッチ)+ N(各アップルのファームと各チョコレートのファクトリーをフェッチ)クエリを実行します。
4)どうやらprefetch_related
、GenericForeignKeysのForeignKeysをフォローするほど賢くはありません。私が試してみると:
print [box for box in Box.objects.prefetch_related(
'content_object__farm',
'content_object__factory').all()]
Chocolate
オブジェクトにフィールドがないことfarm
、およびその逆のことは当然のことです。
5)私ができること:
これは、 1(ボックスをフェッチ)+ 2(すべてのボックスのリンゴとチョコレートをフェッチ)+ 2(すべてのリンゴのファームとすべてのチョコレートのファクトリーをフェッチ)クエリを実行します。欠点は、2つのクエリセット(boxes_with_apples
、boxes_with_chocolates
)を手動でマージして並べ替える必要があることです。私の実際のアプリケーションでは、これらのボックスをページ付けされたModelAdminに表示しています。このソリューションをそこに統合する方法は明らかではありません。たぶん私はこのキャッシングを透過的に行うためのカスタムPaginatorを書くことができますか?
6)これに基づいてO(1)クエリも実行する何かをまとめることができます。_content_object_cache
しかし、それを避けることができれば、内部()をいじりたくありません。
要約:ボックスを印刷するには、GenericForeignKeyのForeignKeysにアクセスする必要があります。O(1)クエリでNボックスを印刷するにはどうすればよいですか?(5)私ができる最善のことですか、それとももっと簡単な解決策がありますか?
ボーナスポイント:このようなクエリを簡単にするために、このDBスキーマをどのようにリファクタリングしますか?
django - Django-一般的な外部キーで特定のタイプを参照する方法は?
レポートモデル内の任意のタイプ(AまたはB)のモデルを一般的な方法で参照できるように、一般的な外部キーを作成しました。
正常に動作しますが、私の問題は、特定のタイプのモデルを参照するすべてのReportインスタンスを取得するためのクエリを作成する必要があることです(たとえば、クラスAを参照するforeign_keyを持つすべてのReport)。データベースのcontent_typeにアクセスしようとしましたが、どうやらそれは不可能です(変数は存在しません...)これ
が私のモデルです:
あなたはそれを行う方法を知っていますか?
何かが変わる場合に備えて、データベースにはmongoDBを使用しています。
どうもありがとう!
編集:
データベースにレポートオブジェクトを表示すると、結果は次のようになります。
ご覧のとおり、データベースのコンテンツは私のモデルと何も似ていないので、クエリを実行して、foreign_keyがAのすべてのレポートを取得する方法がわかり
ません。手伝ってくれませんか。