Ndb To_dict Method Does Not Include Object's Key
Solution 1:
You're not missing anything ;-)
Just add the key to the dictionary after you call to_dict, and yes override the method.
If you have multiple models that don't share the same base class with your custom to_dict, I would implement it as a mixin.
to define to_dict as a method of a Mixin class. you would
classModelUtils(object):
defto_dict(self):
result = super(ModelUtils,self).to_dict()
result['key'] = self.key.id() #get the key as a stringreturn result
Then to use it.
class MyModel(ModelUtils,ndb.Model):
# some properties etc...
Solution 2:
Another easy way to achieve that (without having to override to_dict
) is to add a ComputedProperty
that returns the id, like so:
classMyModel(ndb.Model):
# this property always returns the value of self.key.id()
uid = ndb.ComputedProperty(lambda self: self.key.id(), indexed=False)
# other properties ...
A ComputedProperty
will be added to the result of to_dict
just like any other property.
There are just two constraints:
- Apparently the name of the property can not be
key
(since that would conflict with the actual key) andid
doesn't work either. - This won't work if you don't specify a key or id when you create the object.
Also, the computed value will be written to the data store when you call put()
, so it consumes some of your storage space.
An advantage is that this supports the include
and exclude
arguments of to_dict()
out of the box.
Post a Comment for "Ndb To_dict Method Does Not Include Object's Key"