У меня есть база данных с авторами и книгами.У одного автора может быть несколько книг, а у одной книги может быть несколько авторов, поэтому схема может быть много-многоЦелью является создание REST API с использованием sqlalchemy и marshmallow:
secondary_foo = db.Table('secondary_foo',
db.Column('author_id', db.Integer, db.ForeignKey('author.id')),
db.Column('book_id', db.Integer, db.ForeignKey('book.id')))
class Author(db.Model):
__tablename__ = 'author'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
authors = db.relationship('Author', secondary="secondary_foo", backref='books', lazy="joined")
class AuthorSchema(ma.ModelSchema):
class Meta:
model = Author
class BookSchema(ma.ModelSchema):
authors = ma.Nested(AuthorSchema, many=True)
class Meta:
model = Book
Теперь я добавлю несколько авторов и книг:
authors_schema = AuthorSchema(many=True)
author_schema = AuthorSchema()
book_schema = BookSchema()
author = Author(name='Chuck Paluhniuk')
book = Book(title='Fight Club')
book.authors.append(author)
db.session.add(author)
db.session.add(book)
db.session.commit()
book1 = Book(title='Lord of the Rings')
book1.authors.append(author)
db.session.add(book1)
db.session.commit()
s = BookSchema(many=True)
a = AuthorSchema(many=True)
author1 = Author(name='Tolkien')
book1.authors.append(author1)
db.session.commit()
Теперь я хочу напечатать всех авторов и их книги:
authors = Author.query.all()
print(authors_schema.dump(authors))
[{'books': [1, 2], 'id': 1, 'name': u'Chuck Paluhniuk'}, {'books': [2], 'id': 2, 'name': u'Tolkien'}]
Однако я хочу отобразить название книги вместо идентификаторов, например:
[{'books': ['Fight Club', 'Lord of the Rings'], 'id': 1, 'name': u'Chuck Paluhniuk'}, {'books': ['Lord of the Rings'], 'id': 2, 'name': u'Tolkien'}]