Как в списке flask объектов BaseQuery найти элемент с указанным c ID? - PullRequest
0 голосов
/ 11 июля 2020

(Flask / Jinja2 / SQLAlchemy)

У меня есть страница, на которой разные пользователи могут оставлять комментарии, и я пытаюсь указать имя пользователя в их комментариях. Проблема в том, что в таблице комментариев используется внешний ключ в столбце «Автор», поэтому, когда я пытаюсь вызвать автора комментария, используя {{ comment.author }}, я получаю вместо этого идентификатор пользователя.

Чтобы получить все комментарии на странице я использую следующее в views.py :

# ...
all_comments = Comments.query.filter_by(page = this_page.id)
return render_template('page.html', all_comments = all_comments)
# ...

В шаблоне jinja я использую следующее для отображения всех комментариев:

{% for comment in all_comments %}
    {{ comment.author }}:
    {{ comment.content }}
{% endfor %}

Я получаю что-то вроде 1: my comment вместо name: my comment.

Мое первоначальное решение - передать переменную commenters, содержащую объект BaseQuery со всеми люди, которые разместили на странице, а затем пытаются вызвать правильного комментатора, передав идентификатор пользователя, {{ commenters[post.author] }}. К сожалению, это может вернуть только n-го комментатора вместо комментатора с указанным c ID, который я хотел.

Как мне получить объект из BaseQuery, который имеет указанный c ID в шаблон jinja? Я приветствую альтернативные решения, но я также хотел бы получить решение для этого конкретного сценария c, пожалуйста.

Спасибо!

1 Ответ

0 голосов
/ 11 июля 2020

Мое текущее решение - запросить таблицу Users для каждого элемента в all_comments, а затем назначить имя пользователя записи, не фиксируя изменения в views.py :

# ...
for entry in all_comments:
    entry.author = Users.query.get(entry.author).name
# ...

Это позволило мне узнать имя автора при звонке на {{ comment.author }}. Однако по какой-то причине это выглядит неправильно. Альтернативы приветствуются!

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