Ссылка на один тип хранилища данных 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)
Другие вопросы по тегам