#sql #flask #sqlalchemy #flask-sqlalchemy
Вопрос:
У меня есть три модели колбы-sqlalchemy. Books
— уникальные записи от администратора:
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
book_name = db.Column(db.String(20), unique=True, nullable=False)
def __repr__(self):
return self.book_name
Bookscomp
— записи пользователей, относящиеся к вышеуказанному:
class Bookscomp(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
book = db.Column(db.Integer, db.ForeignKey('book.id'))
Company
— пользователь, связанный с вышеуказанным:
class Company(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), nullable=False)
books = db.relationship('Bookscomp', secondary=companybook, lazy='dynamic',
backref=db.backref('company'))
companybook = db.Table('companybook',
db.Column('companyid', db.Integer, db.ForeignKey('company.id'), primary_key=True),
db.Column('bookid', db.Integer, db.ForeignKey('bookscomp.id'), primary_key=True),
)
Проблема: я пытаюсь перейти book_name
от Book
модели через Company
Bookscomp
.
Таким образом, у компании много книг, и в каждой книге есть ссылка на общую информацию о книге.
Пробовал вот так:
company = OrganizatCompanyion.query.filter_by(id=comp.id).first()
books = company.books.all()
for item in books:
print(item.book.book_name)
#AttributeError: 'int' object has no attribute
print(item.book)
#Gives book id from book model, but I need name
Почему я не могу напрямую попасть book_name
в приведенный выше фрагмент кода? И как было бы лучше всего этого достичь?
Ответ №1:
Вы не определили отношения между Book
и Bookcomp
, поэтому, когда вы просите item.book
-это получает book = db.Column(db.Integer...
значение. Может быть, измените свою Bookscomp
модель так, чтобы она была чем-то вроде:
class Bookscomp(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
book_id = db.Column(db.Integer, db.ForeignKey('book.id'))
book = db.relationship('Book')