написание ndb-запроса для возврата ключа объекта вместе с объектом - PullRequest
1 голос
/ 17 апреля 2020

У меня есть модель пользователя ndb:

class User(ndb.Model):
    active = ndb.BooleanProperty(default=True,required=True)
    email= ndb.StringProperty(required=True)

, которую я вызываю для получения файла JSON со всеми моими пользователями

@app.route('/get_users')
@login_required
def get_user_data():
    users = json.dumps([u.to_dict() for u in User.query().fetch()])
    return users

Выходные данные выглядят так :

[{"email": "user@email.com"},{"email": "user2@email.com"}....]

Я хотел бы передать идентификатор каждого пользователя в объект, чтобы впоследствии я мог использовать его для запроса отдельных пользователей. В идеале я хочу получить вывод, который выглядит следующим образом:

[{"email": "user@email.com", "id": xxxxxx},{"email": "user2@email.com", "id": xxxxxx}....]

Я попытался добавить следующее объявление в мой класс модели: id = ndb.KeyProperty ()

, но я получение нулевых значений вместо извлечения фактического значения идентификатора из сущностей хранилища данных.

Как мне go узнать о получении ключей всех пользователей и добавлении их в возвращаемые объекты?

1 Ответ

2 голосов
/ 18 апреля 2020

Вы можете расширить User.to_dict, чтобы дополнительно включить ключ:

def to_dict(self, include=None, exclude=None, include_key=False):
    d = super().to_dict(include=include, exclude=exclude)
    if include_key:
        d['key'] = self.key.urlsafe().decode() # or some other JSON-friendly version of the key
    return d

Затем измените свой код следующим образом:

users = json.dumps([u.to_dict(include_key=True) for u in User.query().fetch()])

Ключ можно восстановить из его ключа urlsafe. представление, подобное этому ( документы ):

>>> ndb.Key(urlsafe=b"agdleGFtcGxlcgsLEgRLaW5kGLkKDA")
Key('Kind', 1337, project='example')
...