django: モデルをそのモデルのインスタンスから取得するベストプラクティスな方法
質問
質問
my_instance
はモデル
MyModel
.
という良い方法を探しています。
my_model = get_model_for_instance(my_instance)
私はこれを行うための本当に直接的な方法を見つけられませんでした。 今のところ、私はこれを思いつきました。
from django.db.models import get_model
my_model = get_model(my_instance._meta.app_label, my_instance.__class__.__name__)
これは受け入れられることなのでしょうか?確実な、ベストプラクティスの方法と言えるのでしょうか?
また
_meta.object_name
と同じものを提供するようです。
__class__.__name__
. そうなのでしょうか?良いのですか、悪いのですか?もしそうなら、なぜですか?
また、例えば 'django.contrib.auth' の 'auth' と 'myproject.auth' のように、アプリのラベルがプロジェクトの範囲内で複数回発生する場合、正しいモデルを取得しているとどうしたら分かりますか?
このような場合
get_model
は信頼できないのでしょうか?
ヒント/ポインタと経験の共有に感謝します!
どのように解決するのですか?
my_model = type(my_instance)
それを証明するために、別のインスタンスを作成することができます。
my_new_instance = type(my_instance)()
このように、pythonのオブジェクトにはすでにこの機能があるため、直接的な方法がないのです。
更新されました...
私が好きなのは
marcinnさんのレス
を使った
type(x)
. これは元の答えが使っていたものと同じです (
x.__class__
) と同じですが、私は魔法の属性にアクセスするよりも、関数を使う方が好きです。このように、私は
vars(x)
から
x.__dict__
,
len(x)
から
x.__len__
といった具合です。
updated 2...
遅延されたインスタンス(コメントで @Cerin が言及しています)については、元のクラスに
instance._meta.proxy_for_model
.
関連
-
[解決済み] Django のカスタムフィールドで User モデルを拡張する
-
[解決済み] Django で完全な/絶対的な URL (ドメイン付き) を取得するにはどうすればよいですか?
-
[解決済み] Django Model() vs Model.objects.create()
-
[解決済み】Djangoのモデルインスタンスオブジェクトをクローンして、データベースに保存する方法は?
-
[解決済み】Django: モデルフィールドのリストを取得しますか?
-
[解決済み】Djangoでモデルインスタンスをシリアライズする方法は?
-
[解決済み] djangoでクエリセットから最初のオブジェクトを取得する最速の方法は?
-
[解決済み】Djangoプロジェクトの作業ディレクトリ構造に関するベストプラクティス【終了しました
-
[解決済み] Djangoです。文字列からモデルを取得する?
-
[解決済み] django : select_related と get_object_or_404 を一緒に使用する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
オペレーショナルエラーです。1050 解決
-
Django。"makemigrations "時に変更が検出されない。
-
Djangoキャッシュの説明
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
-
[解決済み] django-rest-framework の管理者スタイルのブラウズ可能なインターフェイスを無効にする方法は?
-
[解決済み] Django の filter と get は単一オブジェクトの場合?
-
[解決済み] django で複数のオブジェクトを削除する
-
[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
-
[解決済み] Djangoのデータベースクエリ。id でオブジェクトを取得するには?
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?