0

Django にレガシー データベースを統合しようとしています。

ひどく悪いデータベース設計の結果、いくつかの奇妙なテーブルで問題が発生していますが、それを自由に変更することはできません。

問題は、主キーIDではなく製品IDを持つテーブルがあることです。ここで問題が発生します。たとえば、特定の列に複数の値が必要な場合、それらの多くは複数です。

ID  |   ...   |  namestring

2   |   ...   |  name1
2   |   ...   |  name2 

通常の主キーの動作を回避し、複数の行を持つそのような ID のオブジェクトを返す関数を作成する可能性はありますか? その場合、列の名前文字列はリストになる可能性があります。

これは別のシステムからエクスポートされたデータであるため、手動で編集する必要はありません。アクセスするだけです..

4

1 に答える 1

2

一意の主キー列を追加しない限り、DjangoのORMはこのテーブルの操作で問題が発生します。

主キーを追加する場合は、特定の製品IDを照会し、その製品IDに対応する値のリストを返すメソッドを作成するのは簡単です。何かのようなもの:

def names_for(product_id):
    return [row.namestring for row in ProductName.objects.filter(product_id=product_id)]

この関数は、カスタムマネージャーメソッド、Productモデルのメソッド、または最も意味のあるものにすることもできます。

編集:このテーブルのproduct_idが参照するProductモデルがあり、このテーブルの唯一の用途は特定の製品のこれらの名前を検索することであると仮定すると、他のオプションはこのテーブルを除外することです。 ORM全体で、生のSQLとcursor.executeを使用してその製品の名前をフェッチするメソッドをProductに記述します。これは素晴らしくクリーンであり、テーブルに一意のPKを追加する必要はありません。失う主なものは、Djangoモデルフォームまたは管理者を介してこのテーブルを管理する機能です。

于 2009-09-04T18:00:32.120 に答える