Flas中的子页面处理

2024-04-24 13:10:44 发布

您现在位置:Python中文网/ 问答频道 /正文

新来的烧瓶…我有一个应用程序,我在那里我有比赛和球队,任何数量的球队可以属于一个特定的比赛。以下是竞赛、团队和竞赛团队的模型

class CompetitionTeam(db.Model):
    __tablename__ = 'CompetitionTeams'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    Competitions = db.Column(db.ForeignKey(u'Competitions.id'), nullable=False, index=True)
    Teams = db.Column(db.ForeignKey(u'Teams.id'), nullable=False, index=True)
    CreateDate = db.Column(db.DateTime, nullable=False)

    Competition = db.relationship(u'Competition')
    Team = db.relationship(u'Team')


class Competition(db.Model):
    __tablename__ = 'Competitions'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    Name = db.Column(db.String(120), nullable=False)
    Date = db.Column(db.Date, nullable=False)
    Location = db.Column(db.String(120))
    CreateDate = db.Column(db.DateTime, nullable=False)
    LastModifiedDate = db.Column(db.DateTime, nullable=False)

class Team(db.Model):
    __tablename__ = 'Teams'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    Number = db.Column(db.Integer, nullable=False)
    Name = db.Column(db.String(120), nullable=False)
    Website = db.Column(db.String(120))
    CreateDate = db.Column(db.DateTime, nullable=False)
    LastModifiedDate = db.Column(db.DateTime, nullable=False)

我有/competitions和/teams的路线,我可以毫无问题地添加/删除比赛和团队。我有一个/比赛的模板文件,上面有添加比赛表格和现有比赛的列表。我希望能够做的是支持/competitions/,这样当我单击列表中的某个现有比赛时,它会打开一个子页面,列出当前分配给该竞赛的团队,并提供了一个表格来向该竞赛添加团队。关于如何处理这一问题的任何建议都会很有帮助。我的形式和观点(thusfar)如下:

^{pr2}$

刚刚提交了我在这个分支上的当前进度:https://github.com/jasonrahm/rrftc/tree/addTeamsToComp


Tags: keyidfalsetruedbdatetimestringmodel
1条回答
网友
1楼 · 发布于 2024-04-24 13:10:44

在大卫伊斯的帮助下回答我自己的问题…我把它弄得比我需要的困难得多。以下是我的(未完成但正在工作)路线:

@app.route('/competitions/<int:id>', methods=['GET', 'POST'])
def manage_competition(id):

    form = CompetitionTeamForm(request.values, competition=id)
    comp = Competition.query.get(id)
    form.competition = comp.Name
    form.team.choices = [(a.id, a.Number) for a in Team.query.order_by('Number')]

    user = session['username']

    if user is None:
        redirect(url_for('signin'))
    else:
        if request.method == 'POST':
            if form.validate() == False:
                return render_template('competition_details.html', form=form, id=id)
            else:
                postdata = request.values
                comp = int(postdata['competition'])
                team = int(postdata['team'])

                newteam = CompetitionTeam(competitions=comp, teams=team)
                db.session.add(newteam)
                db.session.commit()

                return redirect(url_for('manage_competition', id=id))

        elif request.method == 'GET':
            return render_template('competition_details.html', form=form, id=id)

我的模板也没有完成,但功能是有的:

^{pr2}$

我在表单上为团队列表使用QuerySelectField,并隐藏competition字段而不呈现它,因为它是作为子页面在URL中传递的。在

class CompetitionTeamForm(Form):
    competition = HiddenField('Competition')
    team = QuerySelectField(query_factory=lambda: Team.query.all(), get_label='Number')
    submit = SubmitField('Add Team')

希望这有助于另一个菜鸟尝试把所有的部分组合起来。在

相关问题 更多 >