Ссылка на один тип хранилища данных Google несколько раз в другом виде с помощью ndb
У меня есть ниже 2 ndb модели
from endpoints_proto_datastore.ndb import EndpointsModel
class Foo(EndpointsModel):
attr1 = ndb.StringProperty(required=True)
class Bar(EndpointsModel):
attr1 = ndb.KeyProperty('Foo', required=True)
attr2 = ndb.KeyProperty('Foo', required=True)
Как вы видите, Бар имеет несколько ссылок на Foo.
Теперь, когда я присваиваю значения каждой из ссылок, вторая заменяет первую, и только она сохраняется в БД, и самая забавная часть заключается в том, что при поиске с помощью средства просмотра хранилища данных dev_appserver свойство находится под именем 'Foo', не под именем второго свойства, которое заменило первое.
После того, как я вставлю это то, что я ожидаю
Bar(key=Key('Bar', xxxxxxxxxxxxxxxx), attr1=Key('Foo', xxxxxxxxxxxxxxxx), attr2=Key('Foo', xxxxxxxxxxxxxxxx)
но я только получаю
Bar(key=Key('Bar', xxxxxxxxxxxxxxxxxx), attr2=Key('Foo', xxxxxxxxxxxxxxxx))
И в просмотрщике хранилища данных,
Entity Kind Bar
Entity Key xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ID xxxxxxxxxxxxxxxx
Foo (Key) xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Foo: id=xxxxxxxxxxxxxxxx
1 ответ
Первым аргументом KeyProperty является имя свойства (если вы хотите, чтобы имя отличалось от свойства класса), поэтому двойное использование одного и того же имени приведет к появлению поведения, которое вы видите.
Вместо этого вы должны использовать именованный аргумент для указания вида:
ndb.KeyProperty(kind='Foo', required=True)