1

Userオブジェクトは、関連付けテーブルProjectで指定されたさまざまな方法で に関連付けることができます。Job私のテンプレート ファイルでは、すべてのプロジェクトをループして、current_user.projectsそれぞれのプロジェクトでそのユーザーが何をしたかを指定しようとしJobていますが、正しい構文を取得できません。

モデル

class Project(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(80))
    users = db.relationship("Job", back_populates="project")

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(155))
    last_name = db.Column(db.String(155))
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    projects = db.relationship("Job", back_populates="user")

# defines a user's role related to each assigned project
class Job(db.Model):
    __tablename__ = 'job'
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
    project_id = db.Column(db.Integer, db.ForeignKey('project.id'), primary_key=True)
    job = db.Column(db.String(50))
    user = db.relationship("User", back_populates="projects")
    project = db.relationship("Project", back_populates="users")

    def __init__(self, user_id, project_id, job="client"):
        self.user_id = user_id
        self.project_id = project_id
        self.job = job

見る

@app.route('/projects')
@login_required
def projects():
    projects = Project.query.join(Job).filter_by(user_id=current_user.id).all() 
    # current_user.projects would probably do the same thing            
    return render_template('project/projects.html', projects=projects)

テンプレート

<div class="accordion style-two gradient-bg">
    <div class="panel-group" id="accordion-2">
        {% for project in projects %}
        <div class="panel panel-default">
            <!-- Accordian Title -->
            <div class="panel-heading">
                <div class="panel-title">
                    <a class="accordion-toggle collapsed" href="#{{ project.id }}" data-parent="#accordion-2" data-toggle="collapse" aria-expanded="false">
                        {{ project }} - HELP NEEDED HERE--> ({{ project.user[0].job }})
                    </a>
                </div>
            </div>
            <!-- Accordian Detail -->
            <div id="{{ project.id }}" class="panel-collapse collapse">
                <div class="panel-body">
                    <div class="container">
                        <div class="row">
                        <p>Lorem ipsum dolor sit amet, ei vis iriure phaedrum, sea no regione delicata sadipscing. Minim imperdiet vix ad, pro ei utinam dicunt epicurei. Vide affert debitis has ex. Vel ut consul molestiae pertinacia. Duo graeci dictas consulatu in, ei veniam singulis qui, decore numquam duo id.</p>                        
                        <p>Prima tritani veritus id pro, elitr hendrerit comprehensam ei per. Doming integre aliquando has at. Ea eam aeterno lobortis, ea est mutat laudem semper. Pertinax urbanitas nec ne, quo aliquip voluptaria scriptorem ut. Ut mel tractatos reprimique contentiones, adhuc nulla apeirian usu no, mel imperdiet molestiae abhorreant ut.</p> 
                        </div>
                    </div>
                </div>
            </div>
        </div>
        {% endfor %}
   </div>
</div>

上記のようproject.users[0].jobに、システムには 1 人のユーザーしかいないため、正しい情報が表示されます。current_userループしているときに関連するジョブを探していることをテンプレート レベルで指定するにはどうすればよいprojectsですか? ありがとう!

4

1 に答える 1

1

コメントで提案されているように、最も簡単な方法は、関連するテーブルを最初にクエリすることです。projects = Job.query.filter_by(user_id=current_user.id).all()

Project参照されている各情報にすぐにアクセスでき( project.project)、ジョブの詳細も取得できます ( project.job)。

于 2017-07-03T12:55:27.440 に答える