Почему я не могу вызвать inspect (self) .relationships.keys () в объявлении класса в SQLAlchemy? - PullRequest
0 голосов
/ 28 апреля 2020

Задача

Я хотел бы включить отношения из таблицы в __repr__

Модель

class Artist(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    venues = db.relationship('Venue',secondary=venue_artist, lazy=True, back_populates='artists')
    shows = db.relationship('Show', secondary=artist_show, lazy=True, back_populates='artists')

    def __repr__(self):
          col_names = self.__table__.columns.keys() + ('rel-' + inspect(self).relationships.keys()) # works as expected without the relationship keys
          li = [col + ': ' + str(getattr(self,col)) for col in col_names if not col[:3] == 'rel-']
          s = f" | ".join(li)
          return f'{s}'

Трассировка для Ошибка атрибута

Traceback (most recent call last):
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\env\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\app.py", line 370, in search_artists
    print(row.id, row.name, row.shows)
  File "C:\Projects\udacity\projects\01_fyyur\starter_code\app.py", line 110, in __repr__
    col_names = self.__table__.columns.keys() + inspect(self).relationships.keys()
AttributeError: 'InstanceState' object has no attribute 'relationships'

Мои исследования

Хорошим решением является реализация способа представления данных в виде model_class (см. Реализация BaseModel от Стивена Фюри), но я не понимаю, почему. Я не смог найти ни хорошего, ни понятного новичку объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...