应用程序引擎NDB数据存储属性子类Float或Integ

2024-03-29 04:46:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个NDB属性子类,它允许我将一个数字存储为ndb.整数属性(如果数字是整数)或作为ndb.FloatProperty公司(如果数字是浮点数)。在

class Integer(ndb.Model):
    number = ndb.IntegerProperty()

class Real(ndb.Model):
    number = ndb.FloatProperty()


class NumberProperty(ndb.StructuredProperty):
    def _validate(self, value):
        assert isinstance(value, (int, float))

    def _to_base_type(self, value):
        if isinstance(value, int):
            return Integer(number=value)
        else:
            return Real(number=value)

    def _from_base_type(self, value):
        return value.number

然后我创建一个使用这个NumberProperty的测试类,并尝试创建一个实体:

^{pr2}$

我收到以下类型错误:init()至少有2个参数(给定1个)。在

请给我一个提示,我应该如何设置所需的子类。我试过很多其他的形式,但都没用。谢谢。在


Tags: selfnumbermodelreturnvaluedef数字整数
2条回答

最后我发现以下方法最有效:

class NumberProperty(ndb.GenericProperty):
    def _validate(self, value):
        assert isinstance(value, (int, long, float))
        return value

试试这样的方法:

class NumberModel(ndb.Model):
    i = ndb.IntegerProperty()
    f = ndb.FloatProperty()

class NumberProperty(ndb.StructuredProperty):
    def _validate(self, value):
        assert isinstance(value, (int, float))

    def _to_base_type(self, value):
        if isinstance(value, int):
            return NumberModel(i=value)
        else:
            return NumberModel(f=value)

    def _from_base_type(self, value):
        v = value.i if value.i is not None else value.f
        return v

https://developers.google.com/appengine/docs/python/ndb/subclassprop

相关问题 更多 >