扩展与具有空白属性的常规模型



我遇到这样一种情况:我使用的模型具有所有实体所需的许多属性,以及一些特定于两个备选方案之一的属性,如以下示例所示:

class Machine(ndb.Model):
    #Properties for all machines:
    price = ndb.FloatProperty()
    model = ndb.StringProperty()
    vendor = ndb.KeyProperty()
    #...
    #Properties exclusive to type A machines:
    foo1 = ndb.StringProperty()
    foo2 = ndb.StringProperty()
    #Properties exclusive to type B machines:
    bar1 = ndb.StringProperty()
    bar2 = ndb.StringProperty()

据我了解,我可以采取两条道路之一。要么我把它变成一个普通的ndb。建模并只留下一些没有内容的属性,或者我可以使用 ndb。展开模型并提前设置固定属性,然后根据情况添加其他属性。

据我了解,当您不知道所需的属性时,Expando 模型很有用,但我确实事先知道所需的所有属性(foo1、foo2、bar1、bar2(。我应该使用扩展还是可以使用常规的ndb。建模并为每个实体留空一些属性?

对于您的场景,我会认真考虑使用 ndb。多模型

class Machine(ndb.Model):
    #Properties for all machines:
    price = ndb.FloatProperty()
    model = ndb.StringProperty()
    vendor = ndb.KeyProperty()
class MachineA(Machine):
    foo1 = ndb.StringProperty()
    foo2 = ndb.StringProperty()
class MachineB(Machine):
    bar1 = ndb.StringProperty()
    bar2 = ndb.StringProperty()

然后,这允许您查询所有机器的,

按 Machine.query(( 或单个机器类型 with MachineB.query((

只是我的 2c。 (我有很多项目使用它。 例如,产品和具有不同附加属性的不同产品类型(,例如植物与泵,两者都是基本产品,带有价格、分类、照片等(,但植物将具有不同的分类(开花、不开花(,泵将具有流速、瓦特等(但我可以找到所有产品,<25 美元(植物或其他(Product.query(Product.price < 25)

最新更新