序文
個別のフィールド セット (フィールド モデル) を持つオブジェクト (オブジェクト モデル) が必要です。名前とタイプが含まれています (図を参照)。Object と Field の間の各接続には、フィールドの値が格納されます。値のデータ型は Field type プロパティに依存し、物理的に値は定義済みの db 列 (value_number、value_text、...) の 1 つに格納されます。
どのように動作させたいか:
field = Field.objects.get(pk=1)
sought_for = Object.fields.filter(field=field, value='test')
例と同じように単純に QuerySet に入れることができるフィールドを作成する方法はありますか?実際には、フィールドのタイプに応じて、異なる db 列または列を使用します。その値を格納するために複数の列を必要とします。
PS いくつかの EAV アプリケーションを試しましたが、私の場合には複雑すぎるようでした。
ダイアグラム:
- フィールドモデル、フィールドの名前とタイプを保存します
- FieldValue、フィールドの値が格納されるモデル。
UPD:最終的に、Postgres (または任意のリレーショナル データベース) を使用するアプローチそのものが最良の選択ではないという考えに至りました。これをMongoDBに簡単に実装しました。