Я создал две связанные таблицы, и вот как они выглядят: <pre><code class="python">class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(30), nullable=False, unique=True, index=True)
password = db.Column(db.String)
rol = db.Column(db.String(15), index=True)
date_registration = db.Column(db.DateTime, default=datetime.utcnow)
user_cards = db.relationship("Cards", backref="user")
class Cards(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
text = db.Column(db.Text)
date_add_card = db.Column(db.DateTime, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))</code></pre>
На странице /index я вывел все карточки и даты их добавления. Теперь у меня возник вопрос: как вывести автора каждой карточки?
Вот HTML код, который я использую: <br/> <pre><code class="html">{% for el in list_cards %}
{{ el.name }}
{{ el.text }}
Дата публикации: {{ el.date_add_card.date() }}
Автор: {{ el.user_id }}</code></pre>
В текущем варианте у меня выводится user_id, но я не могу обратиться к username. Я пытался сделать так: <code class="html">Автор: {{ el.user_id.username }}</code>, но это не работает, в то время как {{ el.user_id }} выводит корректный ID автора. Как мне правильно получить имя пользователя?
Чтобы получить имя пользователя (username) автора карточки, вам нужно использовать связь между таблицами, которую вы уже определили. В классе `Cards` вы создали отношение к пользователю через внешний ключ `user_id`, что позволит вам получить экземпляр `User`, связанный с каждой карточкой.
В вашем случае вы можете обратиться к пользователю через свойство backref (в данном случае `user`) объекта `Cards`. То есть, вам нужно заменить `{{ el.user_id }}` на `{{ el.user.username }}`. Это вызовет атрибут `username` объекта `User`, связанного с данной карточкой.
Ваш HTML код будет выглядеть следующим образом:
```html
{% for el in list_cards %}
{{ el.name }}
{{ el.text }}
Дата публикации: {{ el.date_add_card.date() }}
Автор: {{ el.user.username }}
{% endfor %}
```
Таким образом, каждая карточка будет выводить имя пользователя вместо его идентификатора. Убедитесь, что в списке `list_cards` вы действительно загружаете все необходимые данные (в данном случае связанные пользователи) при выборке карточек из базы данных. Если вы используете SQLAlchemy, вы можете воспользоваться методом `joinedload()` для этого. Например:
```python
from sqlalchemy.orm import joinedload
list_cards = Cards.query.options(joinedload(Cards.user)).all()
```
Это поможет избежать дополнительных запросов к базе данных и загрузить информацию о пользователе за один запрос.
Если кратко осенило меня решением оно оказалось довольно простым я должен был обращаться через то что написано в backref , а в моем случае это было "user" написал вместо Автор: {{ el.user_id.username }} вот это Автор: {{ el.user.username }} и о чудо оно сработало