Python, Flask & Jinja - Как вывести запрос с помощью группы - PullRequest
0 голосов
/ 01 декабря 2018

Я новичок в Python & Flask и у меня есть вопрос о циклическом выводе с использованием группы.У меня есть таблица с именем Закладки, которая имеет поле с именем categoryid.На моем шаблоне Jinja я хочу сделать что-то вроде:

bookmark.Category.title
  bookmark.title
  bookmark.title

У меня есть часть данных, работающая нормально с отношениями, но я нахожусь в тупике на стороне шаблона.

МойМодель закладки выглядит следующим образом:

class Bookmark(db.Model):
__tablename__ = 'bookmarks'
id                  = db.Column(db.Integer, primary_key=True)
userid              = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
categoryid          = db.Column(db.Integer, db.ForeignKey('categories.id'), nullable=False)
url                 = db.Column(db.TEXT, nullable=False)
title               = db.Column(db.String(128), nullable=False)
allow_all           = db.Column(db.Boolean, nullable=False, default=False)
date_created        = db.Column(db.DateTime, default=db.func.current_timestamp())
date_updated        = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
date_deleted        = db.Column(db.DateTime)

А моя модель категории выглядит следующим образом:

class Category(db.Model):
__tablename__ = 'categories'
id                  = db.Column(db.Integer, primary_key=True)
title               = db.Column(db.String(128), nullable=False)
date_created        = db.Column(db.DateTime, default=db.func.current_timestamp())
date_updated        = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
date_deleted        = db.Column(db.DateTime)

Моя функция контроллера выглядит следующим образом:

@mod_user.route('/home', methods=['GET', 'POST'])
@login_required
def home():
    bookmarks = db.session.query(Bookmark, Category, User)\
        .join(Category)\
        .join(User, Bookmark.userid == User.id)\
        .filter((Bookmark.userid == current_user.id) | (Bookmark.allow_all == True))\
        .order_by(Category.title.asc(), Bookmark.title.asc())\
        .group_by(Category.title)\
        .all()
    return render_template(('user/home.html'), bookmarks=bookmarks)

То, что у меня есть нашаблон сейчас:

    {%  for bookmark in bookmarks %}
    <tr>
        <td><a href="{{ bookmark.Bookmark.url }}" target="_new">{{ bookmark.Bookmark.title }}</a></td>
        <td>{{ bookmark.Bookmark.date_created }}</td>
        <td>{{ bookmark.Category.title }}</td>
        <td>{{ bookmark.User.first_name }} {{ bookmark.User.last_name }}</td>
    </tr>
{% endfor %}

Я бы хотел, чтобы bookmark.Category.title был своего рода перерывом или заголовком - но я потерян.Любые предложения будут высоко оценены.

1 Ответ

0 голосов
/ 01 декабря 2018

Для внешнего ключа категории, который вы создали в модели закладок, вам нужно сделать еще одну запись в модели категории.

Добавить следующий код в модель категории -

class Category(db.Model):
    bookmark = db.relationship('Bookmark', backref='category', lazy='dynamic')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...