колба добавить новую строку на основе идентификатора других таблиц - PullRequest
0 голосов
/ 15 октября 2019

У меня есть две таблицы, названные проекты и действия, и каждый проект содержит несколько действий

class Projet(db.Model):
    __tablename__ = 'projets'
    id = db.Column(db.Integer, primary_key=True)
    nom_projet = db.Column(db.String(100))    
    description_projet = db.Column(db.String(800))                         
    date_affectation = db.Column(db.DateTime, nullable = False)                              
    statut_projet = db.Column(db.String(100))

    admin_id = db.Column(db.Integer, db.ForeignKey('admins.id'))

    actions = db.relationship('Action', backref='projet',
                                lazy='dynamic')

    def __repr__(self):
        return '<Projet: {}>'.format(self.id)

class Action(db.Model):
    __tablename__ = 'actions'  
    id = db.Column(db.Integer, primary_key=True)
    projet_id = db.Column(db.Integer, db.ForeignKey('projets.id'))   
    description =  db.Column(db.String(1000))                        
    statut_action = db.Column(db.String(100))                               
    date_action =  db.Column(db.DateTime, nullable = False) 
    date_execution = db.Column(db.DateTime, nullable = True) 
    def __repr__(self):
        return '<Action: {}>'.format(self.id)

Моя проблема заключается в том, что мне нужно создать новое действие на основе существующего проекта, как показано на рисунке enter image description here Мне нужно нажать на кнопку «Добавить», и он должен перенаправить меня на форму действия с именем проекта, автоматически выбранным, и я ввожу детали действия.

это мой первый код длядобавить действие:

@auth.route('/action/add', methods=['GET', 'POST'])
@login_required
def add_action():
    form = ActionForm()
    if form.validate_on_submit():
        action = Action(
            projet = form.projet.data,
            description = form.description.data,
            statut_action = form.statut_action.data,
            date_action = form.date_action.data,
            date_execution = form.date_execution.data
        )
        try:
            db.session.add(action)
            db.session.commit()
            flash('You have successfully added a new action.')
        except:
            flash('Error: action name already exists.')
        return redirect(url_for('auth.list_projets'))
    return render_template('admin/actions/action.html', action="Add", form=form,
                           title="ADD ACTION")

1 Ответ

0 голосов
/ 15 октября 2019

Шаги:

  1. Обновление URL-адреса для включения project_id в качестве параметра пути: например: /project/1/actions/add предназначено для загрузки страницы с новой формой действия для проекта с идентификатором 1
  2. Обновите ссылки, чтобы добавить новое действие на предыдущей странице (как показано на скриншоте) согласно шагу 1
  3. Удалите поле project из ActionForm, поскольку оно обрабатывается с помощью параметра пути
  4. Обновите страницу «Новая форма действия», чтобы отобразить имя продукта в переменной product_name

Попробуйте,

@auth.route('/project/<project_id>/action/add', methods=['GET', 'POST'])
@login_required
def add_action(project_id):
    form = ActionForm()
    project = Project.query.get(project_id)
    if not project:
        flash('Error: invalid project')
        abort(404)
    if form.validate_on_submit():
        action = Action(
            project = project,
            description = form.description.data,
            statut_action = form.statut_action.data,
            date_action = form.date_action.data,
            date_execution = form.date_execution.data
        )
        try:
            db.session.add(action)
            db.session.commit()
            flash('You have successfully added a new action.')
        except:
            flash('Error: action name already exists.')
        return redirect(url_for('auth.list_projets'))
    return render_template('admin/actions/action.html', action="Add", form=form,
                           title="ADD ACTION", project_name=project.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...