Python ndb.Model必需属性为None

时间:2016-02-11 09:19:08

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我有一个ndb.ModelProjRoute,其属性date我在模型中声明如下:

class ProjRoute(ndb.Model):
  date = ndb.DateTimeProperty(required=True)
  priceValue = ndb.FloatProperty(default=None)
  attachement = ndb.KeyProperty()
  src = PriceFilterProperty()
  dest = PriceFilterProperty()
  # Required qty
  reqQty = ndb.FloatProperty()
  ldQty = ndb.FloatProperty(default=0)
  unldQty = ndb.FloatProperty(default=0)
  amountDue = ndb.FloatProperty(default=0)
  scale1 = ndb.FloatProperty(default=0)
  scale2 = ndb.FloatProperty(default=0)
  toll1 = ndb.FloatProperty(default=0)
  toll2 = ndb.FloatProperty(default=0)
  port_permit = ndb.FloatProperty(default=0)
  port_scale = ndb.FloatProperty(default=0)
  maintenance = ndb.FloatProperty(default=0)
  other = ndb.FloatProperty(default=0)
  fuel = ndb.FloatProperty(default=0)
  gratuity = ndb.FloatProperty(default=0)
  driver_allow = ndb.FloatProperty(default=0)
  adriver_allow = ndb.FloatProperty(default=0)
  driver_bonus = ndb.FloatProperty(default=0)

我很确定在创建新的ProjRoute实例时确实设置了日期值,实际上在调用put()函数时我没有遇到任何问题。

但是,当我尝试读取实例时,我收到错误,因为date属性为null。

BadValueError: Entity has uninitialized properties: date

每次尝试读取实例时都不会出现此错误,这是任意的。

我认为GAE本身一定有问题,但是有人知道如何解决它或知道解决方法吗?

顺便说一下,当我记录任何ProjRoute实例时,我发现属性存储为GenereicProperty而非FloatPropertyKeyProperty,就像我在模型中声明的那样。我认为这可能是相关的。

如果您需要查看它,以下是我创建新实例的代码:

trsPrices = map(float, self.readAll('trs-price'))
for src, dest, price in zip(self.readAll('trs-price-src'), self.readAll('trs-price-dest'), trsPrices):
    route = ProjRoute(id=newPrice.src+"-"+newPrice.dest, parent=routeParent)
    route.attachement = newPrice.attachement
    route.src, route.dest = newPrice.src, newPrice.dest
    route.date = trsSrv.sdate
    route.priceValue = None
    toSave.append(route)

# ... Some irrelevent code
ndb.put_multi(toSave)

另外,仅供参考,我尝试使用route.put()代替ndb.put_multi,但问题仍然存在。

0 个答案:

没有答案