Как получить Reference Field из MongoDB с помощью Flas\MongEngine?

Всем привет!
Есть проблема:
С помощью MongoEngine я создал "схему" документов:
class Users(Document):
    login = fields.StringField(unique=True, max_length=25, primary_key=True, required=True)
    books = fields.ListField(fields.ReferenceField('Books'), default=["No favorites"])

и
class Books(Document):
    title = fields.StringField(required=True)
    author = fields.StringField()


Теперь, с помощью Flask я сделал следующее:
@app.route('/users/<id>', methods=['GET'])
def edit_user(id):
    user = Users.objects(login=id)
    books = [Books.objects(id__in=user[0].books)]
    return user.to_json(), books.to_json()

Все хорошо, пока я пытаюсь "достать" только user. Когда же я пытаюсь вытащить обьект books (ReferenceField), то получаю следующую ошибку:
ValidationError: Books object is not a valid ObjectId

Мне нужны все обьекты со всеми атрибутами, на которые ссылается поле books в обьекте Users.
Каким образом мне вытянуть обьекты, которые лежат в ReferenceField?
Как правильно сделать запрос?
  • Вопрос задан
  • 3042 просмотра
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Эм, я в Питоне ни бум-бум, тем более в MongoEngine, но по аналогии с другими системами - user[0].books вам и вернет ваши книги, самостоятельно выполнив запрос, который вы руками по id выполнить пытаетесь.
Ответ написан
FuN_ViT
@FuN_ViT
веб-разработчик
Судя по документации, нужно сделать:

user = Users.objects(login=id).select_related()

и будет заполнено объектами поле books...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы