0

タプルのリスト(可変サイズ)を持つクラスを持つエリキシルモデルを構築しようとしています。

一例はレシピです

私はこのようなことをすることができますが:

class Recipe(Entity):
    ingrediants = OneToMany('IngrediantList')
    cooking_time = Field(Integer)
    ...

class IngrediantList(Entity):
    ingrediant = ManyToOne('Ingrediant')
    quantity = Field(Number(3,2))

class Ingrediant(Entity):
    name = Field(String(30))
    ...

それには多くの欠点があります。1 つには、ドメインに関して意味のない成分リストのエンティティを作成するのは好きではありません。抽象化を楽しみます。

もう 1 つの問題は、この成分を使用してどのアイテムを準備できるかというクエリは、モデルに関係やフィールドを追加しないと非常に面倒になり、おそらく非効率になることです。

もう 1 つの例は、金種と数量のリストが記載された銀行預金伝票です。

そのようなモデルを設計する最良の方法は何ですか?

4

2 に答える 2

0

これは、複合オブジェクトをモデル化する正しい方法です。IngredientList クラスの名前だけを変更します。RecipeEntry や IngredientQuantity などがより適切です。それをタプルと呼ぶのは、レシピが何らかの材料を必要とするという事実に名前を付ける必要を避けようとしているだけです。

ほとんどのコードで関連付けの詳細を考慮したくない場合は、sqlalchemy associationproxy 拡張機能を使用してプロキシ属性を作成し、詳細を非表示にすることができます。

于 2009-08-10T09:38:20.827 に答える
0

sqlalchemy associationproxy を使用したソリューション これは sqlalchemy ドキュメントからのものです。

于 2009-08-11T02:03:18.533 に答える