問題タブ [generic-relations]

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 投票する
3 に答える
880 参照

django - Django での一般的な関係 (および Admin での使用法) を理解するのに役立ちます

私は自分の会社の Web サイト用に CMS を構築しています (既存の Django ソリューションを調べたところ、よりスリムでシンプルで、私たちの状況を具体的に処理するものが必要です..さらに、このことをよりよく学びたいです)。一般的な関係に頭を悩ませています。

私たちのウェブサイトのコンテンツを定義するモデルPageSoftwareModuleモデル、およびその他のいくつかのモデルがあり、それぞれがget_absolute_url()定義されています。Pageユーザーが任意のインスタンスに、他のページ インスタンスを含む任意のタイプのオブジェクトのリストを割り当てられるようにしたいと考えています。このリストは、そのPageインスタンスのサブメニューになります。

私は次のことを試しました:

これにより、API to do との一般的な関係が得られますpage_instance.links.all()。向かっています。どのようにやってのけるかわからないのは、ページインスタンスの変更フォーム、そのページとデータベース内の他の現存するオブジェクトとの間の関係を作成する方法です。私の望む最終結果:テンプレートで次をレンダリングします:

もちろん、気づいていないことや誤解していることはありますが、自分が知らないことを知らないという領域に足を踏み入れているような気がします。私は何が欠けていますか?

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

django - Django でジェネリック リレーションを使用してモデルを 2 回保存できないのはなぜですか?

追跡するモデルにリンクする一般的な関係を持つモデル TrackedItem を取得しました。

私がそれを行う場合:

私は得る:

確かに、最初の保存では、PK として「1」を持つエントリが作成されました。ただし、2 回目の保存は挿入ではなく、更新する必要があります。

2 回保存できないモデルを更新するにはどうすればよいですか?

普通のモデルならいくらでも節約できます。

編集:一般的な関係とはまったく関係がない場合があります。

オーバーライドされた保存があり、この方法で super を呼び出します:

このようにすると、うまくいきます:

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

python - 任意のモデルインスタンスを参照するDjangoモデル属性

他のアプリのモデルが作成、変更、または削除されたときに記録するために、Djangoのロギングアプリに取り組んでいます。本当に記録する必要があるのは、それを実行したユーザー、タイムスタンプ、アクションのタイプ、および変更されたアイテムだけです。ユーザー、タイムスタンプ、アクションタイプはすべて簡単ですが、影響を受けるアイテムを保存するための良い方法が、後でアイテムを取得できるようにID値とクラス名を保存する以外にどのような方法かわかりません。クラス名を保存すると、実際のクラスを見つけるために少しハッキーな解決策になると思いますので、もっと良い方法があるかどうか疑問に思います。誰か知っていますか?

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

django - Django Ormを使用した一般的な関係でこのエラーの手がかりはありますか?

これは楽しいものです:-)

EAV に取り組んで、モデルの実行時にジェネリック リレーションシップ ハンドラーを挿入します。

model_clsは任意のクラスであり、EavValueクラスにはそれを指す一般的な関係があります。EavValuesから aまで正常に動作しますmodel_clsが、別の方法では、物事を容易にするためにアクセサーを注入する必要があります。

繰り返しますが、実行時にこれを行います。これは、触れられないサード パーティのライブラリで動作するようにするためです。

Patientクラスを としてユニットテストしているmodel_clsときに、次のエラーが発生します。

contribute_to_classさて、簡単な修正はまたはrelated_nameの2 番目のパラメーターを変更することだと思っていましGenericRelationたが、そうではありません! 名前が異なるだけで、まったく同じエラーが発生します。

2 つ目の奇妙な点として、MySql の代わりに Sqlite を使用して同じ単体テストを実行すると、すべてパスします。

さらに、順序やテストに関係なく、2 回目のテストで常にこのエラーが発生します。このプロセスはメソッド内で発生し、セットアップとティアダウンでregister呼び出されるため、メソッドが不完全であると推測しています。registerunregisterunregister

最後の奇妙な事実: unittest の実行中にエラーが発生しますが、手動で再現することはできません。最悪の場合、私の同僚のコンピューターでは、同じバージョンの Python、Django、Ubuntu、および MySQL を使用しているときにエラーが発生しません。

私たちは多くの難しい問題を解決しましたが、これに行き詰まっているので、手がかりをいただければ幸いです.

アップデート:

この素晴らしいゲームの新しい手がかり:

django.core.management.validation の 245 行目 (django 1.2.1) のこのスニペットからエラーが発生します。

r.get_accessor_name() == rel_nameどちらも「患者」であるため、私たちにとってはTrueです。

更新 2:

registerモデルであるアプリを追加するとき。どのモデルでも、問題は発生しなくなりました。unregister理論はここまで...

我々 は 2 つの対称エラー (関係の両側) にあります。related_nameエラー 0_o の抑制の 1 つを削除する

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

django - Djangoでは、異なるモデルへの参照を作成する方法と、それがどのモデルであるかにとらわれない方法は?

私は Django/Pinax に比較的慣れていないので、この独特の状況に直面しています。モデル「車両」があるとします。「Vehicle」の各インスタンスには、「Vehicle」に関連するいくつかの属性がありますが、「automobiles」は「car」、「boat」などの多くのモデルの 1 つになる自動車クラスの 1 つのインスタンスへの参照も持っています。 「飛行機」など

したがって、この「Vehicle」オブジェクトを作成するときは、それが参照するクラス インスタンスにとらわれないようにしたいと考えています。

しかし、すべての車両インスタンスを取得すると、参照されている自動車のコンテンツに到達できるはずです。

どうすればこれを達成できますか? これに対する可能な解決策を探しましたが、私が思いついたのは、django の「ContentTypes」フレームワークの使用だけです。しかし、これには、参照したいクラスに変更を加える必要があります。「車」、「ボート」、「飛行機」ですが、これらは外部アプリである場合があるため、私の場合は少し注意が必要です。

私への指針はありますか?

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

django - Djangoで一般的な関係で注釈を付ける

django-hitcountを使用して、データベースオブジェクトへのヒットを集計しています。オブジェクトごとのヒット数をカウントして、特定の時間範囲でヒット数が最も多いオブジェクトを特定したいと思います。アプリには、ここで関心のある2つのモデルがあります。

「ヒット」は各ヒットをタイムスタンプでログに記録し、HitCountはヒットの総数を保存します。オブジェクトごとに時間範囲内でヒットを取得するには、次のことを行う必要があります。

作成された日付でヒットをフィルタリングするcontent_objectごとのヒット数をカウントします(上記でフィルタリングされた時間範囲内)上記で計算されたカウントで並べ替えますcontent_objectとカウントを返します

これは非常に高額になる可能性があるため、1日1回の計算/キャッシュを計画しました。

最初のステップとして、時間範囲に関係なく、content_objectごとのヒット数をカウントしたいと思いました。

私はすぐに問題に遭遇します:

キーワード'hitcount__content_object'をフィールドに解決できません。選択肢は、created、hitcount、id、ip、session、user、user_agentです。

少し掘り下げてみると、アノテーションと一般的な関係がうまく連携していないことがわかりました。content_objectの代わりにobject_pkを使用すると、正常に機能しますが、オブジェクトの名前がわかりません。

だから私の質問:同じ結果を達成するための代替手段は何ですか?オブジェクトごとにグループ化するだけでなく、名前を保持するにはどうすればよいですか?

私はモデル(content_type)とid(object_pk)を持っているので、これらをいつでも別々にプルできますが、それはエレガントではないようです。。。

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

python - カスケード削除を伴うdjangoの一般的な1対1の関係

ジャンゴの一般的な関係を使用して継承モデルをエミュレートしようとしています。これまでのところ、これは私が思いついたものです:

ここでわかることから (できれば、少なくとも)、 はSubClass1と 1 対 1 の関係を持つ必要があります。そのため、そのフィールドを作成し、それをプロパティでカバーBaseするすべての作業を行ったのです。その一般的な関係を持つことで、カスケード削除が自動的に接続されます。これは私が望むものです (そして、他の方向から削除を接続する信号があります)。_basebasepost-delete

のサブクラスはいくつでも存在する可能性がありBase、気持ち悪いのは、_baseとそのカバー プロパティをコピーして貼り付けなければならないことです。また、これに対応するカスタム オブジェクト マネージャも用意しました。また、Base.

この共通機能をカプセル化して、サブクラスごとにコピーして貼り付ける必要がないようにする良い方法はありますか?

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

django - Django:ジェネリック関係からの値で ValueQuerySet を取得します

一般的な関係によってリンクされた 2 つのモデルがあります。

そして今、「コードが「xxx」であるすべての「bar.value」を次のような構文で取得したいと考えています。

しかし、これは機能しません (Django は、「bars__value」は有効なフィールドではないと教えてくれます)。

ヒントはありますか?

編集:SQLでは、次のようなことをしたでしょう:

または content_type_id を別のクエリで取得する

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

python - Django 間接ジェネリック リレーション

各コンテンツ タイプに対して特定のタグのみが許可される、アプリケーション用のタグ付けシステムを実装しようとしています。

Tag モデルでコンテンツ タイプを設定し、TagAttribution モデルでこの値を使用してみましたが、興味深い結果が得られました。

コード:

シェルテスト:

出力:

この動作がわかりません。会社 ID 1 を使用していたのに、なぜ ID が 13 になったのですか?

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

django - Django: Adding property to User model after creating model based on abstract class

I have a normal model and an abstract model like so:

The Taggable abstract model class then gets used like so:

So if we have a photo object:

I can all the users tagged in the photo with photo.tagged_users.all()

I want to add the inverse relation to the user object, so that if I have a user:

I can call something like user.tagged_photo_set.all() and have it return all the photo objects.

I suspect that since TaggedSubject connects to the Taggable model on a generic relation that it won't be possible to use it as a through model with a ManyToMany field.

Assuming this is true, this is the function I believe I'd need to add (somehow) to the User model:

I'm wondering if it's possible to set it up so that each time a new model class is created based on Taggable, it creates a version of the function above and adds it (ideally as a function that behaves like a property!) to User.

Alternatively, if it is somehow possible to do ManyToMany field connections on a generic relation (which I highly doubt), that would work too.

Finally, if there is a third even cooler option that I am not seeing, I'm certainly open to it.