Итерация по базе данных sqlalchemy с использованием цикла for идет бесконечным циклом - PullRequest
0 голосов
/ 28 января 2019

У меня есть два класса в моем models.py (Пользователь и Дневник).Пользователь содержит информацию о пользователе, а дневник содержит эмоции с примечанием.Когда я пытаюсь перебрать дневник, используя пользовательский объект, который является списком, использующим цикл for, он заходит в бесконечный цикл, который не показывает результат

models.py

from datetime import date
from flaskblog import db, login_manager
from flask_login import UserMixin

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    diaries = db.relationship('Diary', backref='author', lazy=True)


    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"


class Diary(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    diary_date= db.Column(db.DateTime, nullable=False, default=date.today())
    emotion = db.Column(db.String(10))
    note = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Diary('{self.diary_date}', '{self.emotion}','{self.note}')"

rout.py гдеЯ использую дневник

@app.route("/account", methods=['GET', 'POST'])
@login_required
def account():
    diaries=Diary.query.all()
    form = UploadImage()
    #picture_file=save_picture(form.picture.data)
    if request.method == 'POST':
        file = request.files[form.picture.name]
        note=Diary(diary_date=date.today(), note=form.note.data, author=current_user)
        db.session.add(note)
        db.session.commit()
        if file:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.root_path, 'static/pics', filename))
            image_file = url_for('static', filename='pics/' + filename)
            return render_template('account.html', title='Account',image_file=image_file, form=form)
            #filename = 'http://localhost:5000/account' + filename
            #return render_template('account.html', filename = filename,form=form)

    return render_template('account.html', title='Account',form=form)

account.html

{% for diary in diaries %}
         <div class="article-metadata">
              <h2>{{ diary.author.username }}</h2>
              <h2>{{ diary.diary_date.strftime('%Y-%m-%d') }}</h2>
              <h2>{{ diary.emotion }}</h2>
              <h2>{{ diary.note }}</h2>
            </div>
    {% endfor %}

После этого на экране ничего не печатается.Я пытался использовать cmd и использовать тот же цикл на БД.Это идет в бесконечном цикле

>>> user
User('hannah baker', 'baker.hannahkillme@gmail.com')
>>> diaries=Diary.query.all()
>>> diaries
[Diary('2019-01-28 00:00:00', 'None','Nothing specific happened today'), Diary('
2019-01-28 00:00:00', 'None','Day spent well'), Diary('2019-01-28 00:00:00', 'None','My college sucks')]
>>> for diary in diaries:
...     print(diary.note)
...

Это должно напечатать заметки, которые у меня есть

1 Ответ

0 голосов
/ 28 января 2019

вам нужно передать diaries на render_template

    return render_template('account.html', title='Account',form=form, diaries=diaries)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...