Объект 'list' не имеет атрибута 'id' - PullRequest
0 голосов
/ 26 апреля 2020

Я получаю «список» объект не имеет атрибута «идентификатор» ошибка. Я не знаю почему.

@posts.route("/post/<int:post_id>", methods=['GET','POST'])
@login_required 
def course_post(post_id):
    post=Post.query.get_or_404(post_id)
    chapters=Chapter.query.filter_by(post_id=post_id).all()
    chapter_id = chapters.id
    videos=Videos.query.filter_by(chapter_id=chapter_id).all()
    return render_template('course.html', title=post.course_name, post=post, chapters = chapters)
class Chapter(db.Model):
    id = db.Column(db.Integer, primary_key= True)
    chapter_no = db.Column(db.Integer)
    chapter_name = db.Column(db.String(50))
    chapter_desc = db.Column(db.String(50))
    chapter_date = db.Column(db.DateTime, default=datetime.utcnow)
    vi = db.relationship('Videos', backref='topic', lazy=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)

    def __repr__(self):
        return f"Chapter('{self.chapter_no}', '{self.chapter_name}', '{self.chapter_desc}', '{self.chapter_date}', '{self.post_id}'"





class Videos(db.Model):
    id = db.Column(db.Integer, primary_key= True)
    video_no = db.Column(db.Integer)
    video_name = db.Column(db.String(50), nullable=False, index=True)
    video_file = db.Column(db.String(200))
    yout_code = db.Column(db.String(200))
    video_description = db.Column(db.Text(100))
    uploaded_date = db.Column(db.DateTime, default=datetime.utcnow)
    rating = db.Column(db.Integer())
    chapter_id = db.Column(db.Integer, db.ForeignKey('chapter.id'), nullable=False)
    c_v = db.relationship("Chapter", foreign_keys=chapter_id)  #


    def __repr__(self):
        return f"Videos('{self.video_no}','{self.video_name}', '{self.video_file}', '{self.yout_code}', '{self.video_description}', '{self.uploaded_date}', '{self.rating}', '{self.chapter_id}'"

Я пытаюсь получить все видео для каждой главы в таблице Видео, используя внешний ключ chapters.id. Пожалуйста, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Я добавил это в родительский класс (Глава) model.py

medias = db.relationship('Videos', backref='Chapter', lazy='subquery')

Приведенный ниже код извлекает запрос и подзапрос родителя и потомка. Этот код делает это: chapters = db.session.query (Chapter) .filter_by (post_id = post_id) .all () т.е.: видео для каждой главы в шаблоне:

 {% for v in chapters %}
            <h7><a href=""><span class="plus">+</span>{{ v.chapter_name }}</a></h7> <br><br>
              <div class="descDiv">
                 {% for media in v.medias %}
                 <p class="desc">{{  media.video_name }}</p>
                 {% endfor %}

              </div>
        {% endfor %}
0 голосов
/ 26 апреля 2020

Попробуйте обновить свою функцию следующим образом:

@posts.route("/post/<int:post_id>", methods=['GET','POST'])
@login_required 
def course_post(post_id):
    post=Post.query.get_or_404(post_id)
    chapters=Chapter.query.filter_by(post_id=post_id).all()
    chapter_id = chapters and chapters[0].id
    videos=Videos.query.filter_by(chapter_id=chapter_id).all()
    return render_template('course.html', title=post.course_name, post=post, chapters = chapters)

Теперь она использует идентификатор первой главы, которую она нашла. Я не знаю, если вы этого хотите.

Если вы хотите получить список идентификаторов глав, вы можете сделать это следующим образом

chapter_id = [c.id for c in chapters]

Но я не знаю, как библиотека ORM использует фильтрацию по спискам.

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