私はBaseModel(models.Model)、ExtendedModelA(BaseModel)、ExtendedModelB(BaseModel)を持っています。 ExtendedModelAとExtendedModelBは両方とも、他のモデルへの外部キーフィールドを持っています。それらのユニコードメソッドは、この外部キー関連モデルからフィールドを返します。Django - 拡張モデルの効率的なクエリ
私はBaseModelオブジェクト(当然、ExtendedModelAとExtendedModelBオブジェクトを含む)を取り込みたいドロップダウンメニューを持っています。これを行うには、すべての拡張オブジェクト(タイプAとB)とその関連オブジェクトを取得するクエリーセットが必要です。
私がマージされたクエリセットを持っている:
queryset = BaseModel.objects.filter(type=1).select_related('extendedmodela') | BaseModel.objects.filter(type=2).select_related('extendedmodelb')
トラブルがBaseModelのUnicode表現がドロップダウンに提示されていることです。
if hasattr(self, extendedmodela):
return self.extendedmodela.__unicode__()
else:
return self.extendedmodelb.__unicode__()
この結果、オブジェクトごとにデータベースにクエリが実行されます。
この混乱から抜け出す方法についてのアイデアは誰ですか?
基本的には、すべてのBaseModelオブジェクトを効率的に取得するクエリーセットを作成する必要があります。ドロップダウンでそれぞれの拡張クラス(外部キーフィールドオブジェクトのフィールドを表示する)のユニコードメソッドを表示するときに、データベース。私は数千のオブジェクトを持っているので、データベースはヒットします。
乾杯、
ディーン
あなたは 'ExtendedModelA/B'インスタンスのリスト/セットを混ぜ合わせることができませんか? – schwobaseggl
私はよくわかりません - Djangoにはかなり新しいです –