問題タブ [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.
django - Django での一般的な関係 (および Admin での使用法) を理解するのに役立ちます
私は自分の会社の Web サイト用に CMS を構築しています (既存の Django ソリューションを調べたところ、よりスリムでシンプルで、私たちの状況を具体的に処理するものが必要です..さらに、このことをよりよく学びたいです)。一般的な関係に頭を悩ませています。
私たちのウェブサイトのコンテンツを定義するモデルPage
、SoftwareModule
モデル、およびその他のいくつかのモデルがあり、それぞれがget_absolute_url()
定義されています。Page
ユーザーが任意のインスタンスに、他のページ インスタンスを含む任意のタイプのオブジェクトのリストを割り当てられるようにしたいと考えています。このリストは、そのPage
インスタンスのサブメニューになります。
私は次のことを試しました:
これにより、API to do との一般的な関係が得られますpage_instance.links.all()
。向かっています。どのようにやってのけるかわからないのは、ページインスタンスの変更フォーム、そのページとデータベース内の他の現存するオブジェクトとの間の関係を作成する方法です。私の望む最終結果:テンプレートで次をレンダリングします:
もちろん、気づいていないことや誤解していることはありますが、自分が知らないことを知らないという領域に足を踏み入れているような気がします。私は何が欠けていますか?
django - Django でジェネリック リレーションを使用してモデルを 2 回保存できないのはなぜですか?
追跡するモデルにリンクする一般的な関係を持つモデル TrackedItem を取得しました。
私がそれを行う場合:
私は得る:
確かに、最初の保存では、PK として「1」を持つエントリが作成されました。ただし、2 回目の保存は挿入ではなく、更新する必要があります。
2 回保存できないモデルを更新するにはどうすればよいですか?
普通のモデルならいくらでも節約できます。
編集:一般的な関係とはまったく関係がない場合があります。
オーバーライドされた保存があり、この方法で super を呼び出します:
このようにすると、うまくいきます:
python - 任意のモデルインスタンスを参照するDjangoモデル属性
他のアプリのモデルが作成、変更、または削除されたときに記録するために、Djangoのロギングアプリに取り組んでいます。本当に記録する必要があるのは、それを実行したユーザー、タイムスタンプ、アクションのタイプ、および変更されたアイテムだけです。ユーザー、タイムスタンプ、アクションタイプはすべて簡単ですが、影響を受けるアイテムを保存するための良い方法が、後でアイテムを取得できるようにID値とクラス名を保存する以外にどのような方法かわかりません。クラス名を保存すると、実際のクラスを見つけるために少しハッキーな解決策になると思いますので、もっと良い方法があるかどうか疑問に思います。誰か知っていますか?
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
呼び出されるため、メソッドが不完全であると推測しています。register
unregister
unregister
最後の奇妙な事実: 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 つを削除する
django - Djangoでは、異なるモデルへの参照を作成する方法と、それがどのモデルであるかにとらわれない方法は?
私は Django/Pinax に比較的慣れていないので、この独特の状況に直面しています。モデル「車両」があるとします。「Vehicle」の各インスタンスには、「Vehicle」に関連するいくつかの属性がありますが、「automobiles」は「car」、「boat」などの多くのモデルの 1 つになる自動車クラスの 1 つのインスタンスへの参照も持っています。 「飛行機」など
したがって、この「Vehicle」オブジェクトを作成するときは、それが参照するクラス インスタンスにとらわれないようにしたいと考えています。
しかし、すべての車両インスタンスを取得すると、参照されている自動車のコンテンツに到達できるはずです。
どうすればこれを達成できますか? これに対する可能な解決策を探しましたが、私が思いついたのは、django の「ContentTypes」フレームワークの使用だけです。しかし、これには、参照したいクラスに変更を加える必要があります。「車」、「ボート」、「飛行機」ですが、これらは外部アプリである場合があるため、私の場合は少し注意が必要です。
私への指針はありますか?
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)を持っているので、これらをいつでも別々にプルできますが、それはエレガントではないようです。。。
python - カスケード削除を伴うdjangoの一般的な1対1の関係
ジャンゴの一般的な関係を使用して継承モデルをエミュレートしようとしています。これまでのところ、これは私が思いついたものです:
ここでわかることから (できれば、少なくとも)、 はSubClass1
と 1 対 1 の関係を持つ必要があります。そのため、そのフィールドを作成し、それをプロパティでカバーBase
するすべての作業を行ったのです。その一般的な関係を持つことで、カスケード削除が自動的に接続されます。これは私が望むものです (そして、他の方向から削除を接続する信号があります)。_base
base
post-delete
のサブクラスはいくつでも存在する可能性がありBase
、気持ち悪いのは、_base
とそのカバー プロパティをコピーして貼り付けなければならないことです。また、これに対応するカスタム オブジェクト マネージャも用意しました。また、Base
.
この共通機能をカプセル化して、サブクラスごとにコピーして貼り付ける必要がないようにする良い方法はありますか?
django - Django:ジェネリック関係からの値で ValueQuerySet を取得します
一般的な関係によってリンクされた 2 つのモデルがあります。
そして今、「コードが「xxx」であるすべての「bar.value」を次のような構文で取得したいと考えています。
しかし、これは機能しません (Django は、「bars__value」は有効なフィールドではないと教えてくれます)。
ヒントはありますか?
編集:SQLでは、次のようなことをしたでしょう:
または content_type_id を別のクエリで取得する
python - Django 間接ジェネリック リレーション
各コンテンツ タイプに対して特定のタグのみが許可される、アプリケーション用のタグ付けシステムを実装しようとしています。
Tag モデルでコンテンツ タイプを設定し、TagAttribution モデルでこの値を使用してみましたが、興味深い結果が得られました。
コード:
シェルテスト:
出力:
この動作がわかりません。会社 ID 1 を使用していたのに、なぜ ID が 13 になったのですか?
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.