을 얻는 방법 플라스크-의 정밀한 웹 애플리케이션을 빨리 빌 객체을 로드하는 관계 어린이를 위한 신사 템플릿?

StackOverflow https://stackoverflow.com//questions/22019567

문제

저는 기본 모델에 대한 사용자와 게시물입니다.내 사용자가 모델,가

posts = db.relationship('Post', backref='user', lazy='dynamic')

그러나 때,나는 뭔가

return render_template('user.html', users=users)

내가 하고 싶 재료

{% for user in users %}
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.posts|length }}</td>
    </tr>
{% endfor %}

불행하게도,이 작동하지 않습니다.게시물은 쿼리하지 않는 객체 b/c lazy='dynamic'.내가 할 수 있 위의 변경하는 경우 lazy='joined', 지만,그것은 것 적재 모든 게시물에 대한 사용자는 언제든지 나는 쿼리를 위한 사용자.

나도 추가 .options(joinedload('posts')) 내 쿼리,하지만 그것은 말

InvalidRequestError:'사용자.게시물'을 지원하지 않는 객체 인구 열망 선적 적용할 수 없습니다.

어떤 도움에 감사드립니다.

도움이 되었습니까?

해결책

단순히 제거 lazy="dynamic" 인수하고 당신이 사용할 수 있는 joinedload 없이 문제입니다.(을 기억할 때 이렇게 당신이 자신을 열 하드 진단 N+1query 문제입니다.는 경우에 당신은 항상 필요한 게시물,사용 joined 대신에).

필요하신 경우 모든 행동(queriable,결합 가능,으로드),제안을 찾고 응답 이 질문, 제안하는 추가 또 다른 특성에 대한 쿼리를 동적:

class User(db.Model):
    posts = db.relationship('Post', backref='user')

class Post(db.Model):
    # etc.

User.posts_query = db.relationship(Post, lazy='dynamic')

다른 팁

그것은 쿼리를 개체 그렇지만,그 개체를 쿼리가 방법은 당신을 도움이 될 수 있습니다.특별히 이를 위해 사용할 경우,당신은 할 수 있습니다:

{% for user in users %}
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.posts.count() }}</td>
    </tr>
{% endfor %}

를 수행해야 합니다.처음()이나.모든()쿼리에 객체를 얻을 실제 물체/목록입니다.e.g
users = User.query.all()

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top