получить данные о выборе пользователя в отношениях «многие ко многим», используя Flask, SQLAlchemy и WTForms - PullRequest
0 голосов
/ 26 февраля 2020

Это мой первый проект кодирования python / flask / sqlalchemy. Я хочу создать страницу, на которой HR может назначить выбранный проект выбранному сотруднику . Один сотрудник может работать со многими проектами. Многие сотрудники могут работать в одном проекте (отношение многие ко многим).

Моя проблема: я не смог получить выбранный проект для выбранного сотрудника и заполнить таблицу связей . Я попытался выполнить поиск, но не смог найти соответствующие топи c. Спасибо за ответ!

Код для части базы данных my_db.py:

Employee_Task = db.Table('employee_task',
                         db.Column('employee_id', db.Integer, db.ForeignKey('employee.employee_id')),
                         db.Column('task_id', db.Integer, db.ForeignKey('task.task_id'))
                         )


class Employee(db.Model):
    __tablename__ = 'employee'
    employee_id = db.Column(db.Integer, primary_key=True)
    employee_name = db.Column(db.String(100), nullable=True)
    rel_task = db.relationship("Task", secondary=Employee_Task)


# class Task
class Task(db.Model):
    __tablename__ = 'task'
    task_id = db.Column(db.Integer, primary_key=True)
    task_name = db.Column(db.String(100), nullable=True)

    def __repr__(self):
        return "<Task %r>" % self.name

Часть основного кода. Как видите, он добавляет новую строку с такими же employee_id и task_id , но я хочу добавить новый строка с choosen employee_id с choosen task_id

Скажем, когда HR назначается на 5-го сотрудника 8-го проекта, я хочу видеть в одной строке таблицы ассоциации: 5 в столбце employee_id 8 в project_id столбец

main.py:

@app.route("/employee", methods=['POST', 'GET'])
def employee():
    tasks_all = Task.query.all()
    workers_all = Employee.query.all()
    if request.method == 'POST'
        idS = str(int(request.form.get("Assigned_Task")))
        EmployeeID = idS[0] #this is choosen employee, I want add this employee to association table 
        TaskID = idS[-1] #this is choosen project, I want add this project to association table
        e = Employee()
        t = Task()
        e.rel_task.append(t)
        db.session.add(e)
        db.session.commit()
    return render_template('my.html', tasks_all=tasks_all, workers_all=workers_all, form=search,
                           title='List of Employee')

часть страницы html (как видно из таблицы, для данного списка сотрудник отдела кадров может выбрать проект из выпадающего меню и назначить его)

        <table class="table table-hover">
            <thread>
                <tr class="table-info font-italic">
                    <th>Employees</th>
                    <th>Projects</th>
                </tr>
            </thread>
            <tbody>
                {% for worker in workers_all %}
                <tr>
                    <td rowspan="1">{{ worker.employee_name }}</td>
                    <td rowspan>
                        <form action="/employee" method="POST">
                            <div class="input-group">
                                <select class="form-control" name="Assigned_Task">
                                    {% for task in tasks_all %}
                                        <option value="{{ worker.employee_id }} , {{ task.task_id }}">
                                            {{ task.task_name }}
                                        </option>
                                    {% endfor %}
                                </select>
                                <div class="input-group-append">
                                    <button type=submit value="" class="btn btn-sm btn-info">
                                        <i class="fas fa-user-check"></i>
                                        <a class="mr-1">assign</a>
                                    </button>
                                </div>
                            </div>
                        </form>
                    </td>
                </tr>
                {% endfor %}
            </tbody>
        </table>

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я полагаю, вы отправляете строковое представление кортежа. Вы должны преобразовать это. Вы можете сделать это, импортировав встроенную библиотеку python ast.

import ast

@app.route("/employee", methods=['POST', 'GET'])
def employee():
    tasks_all = Task.query.all()
    workers_all = Employee.query.all()
    if request.method == 'POST'
        idS = ast.literal_eval(request.form.get("Assigned_Task"))
        Employee.id, Task.id = idS
        e = Employee()
        t = Task()
        e.rel_task.append(t)
        db.session.add(e)
        db.session.commit()
    return render_template('my.html', tasks_all=tasks_all, workers_all=workers_all, form=search,
                           title='List of Employee')
0 голосов
/ 27 февраля 2020

main.py:

@app.route("/employee", methods=['POST', 'GET'])
def employee():
    tasks_all = Task.query.all()
    workers_all = Employee.query.all()
    if request.method == 'POST'
        idS = str(int(request.form.get("Assigned_Task")))
        EmployeeID = idS[0]  
        TaskID = idS[-1] 
        e_qry = db.session.query(Employee).filter(Employee.employee_id.contains(EmployeeID))
        t_qry = db.session.query(Task).filter(Task.task_id.contains(TaskID))
        e = e_qry.first()
        t = t_qry.first()
        e.rel_task.append(t)
        db.session.add(e)
        db.session.commit()
    return render_template('my.html', tasks_all=tasks_all, workers_all=workers_all, form=search, title='List of Employee')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...