3

外部データ ソースからデータを取得するモデル フィールドと他のフィールドを使用して、Model クラスを作成できるかどうかを教えてください。要点は、このモデルを別のモデルと同じように ModelForm などで活用してもらいたいということです。つまり、特別なフィールド (データベースからのデータにリンクされていない可能性があるフィールド) のデータを取得するアクションを指定して、モデルの「オブジェクト」マネージャーを再定義すると、modelForm は入力をフィールドに関連付けられていないフィールドにリンクします。データベース? 関連オブジェクトに関する同様の質問。その特別なモデルと関係を持つモデルがある場合、関連するオブジェクトを取得する従来の方法 (従来のモデル フィールドと非データベース フィールドの両方) でこのモデル インスタンスを取得できますか?

明確でない場合は教えてください。再構成します。

ありがとう。

編集: カスタム フィールドを使用してモデルを作成し、デフォルトのマネージャーとその関数をオーバーライドしようとしました: all、get、... 従来のモデルとマネージャーのようにオブジェクトを取得すると、機能します。ただし、私は QuerySet を使用していません。ModelForm、関連オブジェクト、および管理機能を取得し、それを操作する唯一の方法は、QuerySet を適切に構築し、マネージャーによって返されるようにすることです。そのため、外部ソースから取得したデータを使用して QuerySet を適切かつ手動で構築したり、django-admin、モデルフォーム、および関連オブジェクトにこのモデルのクエリセット以外のクラスを処理するように指示したりできるかどうか疑問に思っています。

ありがとう

4

2 に答える 2

1

その方法は、カスタム メソッドを定義することです。

モデルでカスタム メソッドを定義して、カスタムの「行レベル」機能をオブジェクトに追加します。Manager メソッドは「テーブル全体」の処理を行うことを目的としていますが、モデル メソッドは特定のモデル インスタンスに対して動作する必要があります。

これは、ビジネス ロジックを 1 つの場所 (モデル) に保持するための貴重な手法です。

于 2012-11-12T22:45:03.360 に答える
0

私は今、部分的な解決策を持っています。Manager をオーバーライドし、特にその all() および get() 関数をオーバーライドします (現時点ではこれらの関数のみが必要なため)。all() は、外部データ (私の場合は xmlrpc を介して取得) からオブジェクトを構築するロジックの結果を追加したクエリセットを返します。これらのオブジェクトを _result_cache 属性を介して qs に追加しました。きれいではないと思います。実際、私のモデルはカスタム モデルになり、データベース フィールドがありません。データベースのモデルを埋めるために使用するかもしれません...しかし、従来のモデルと同じように使用できます: MyModel.objects.all() など。

誰かが別のアイデアを持っているなら、私は本当に感謝しています.

よろしく

于 2012-11-15T14:03:47.823 に答える