首页 > 解决方案 > 修复 Flask 应用程序上的自关联关系上使用 association_proxy 时的 __init__() 错误

问题描述

我正在开发一个带有烧瓶的应用程序,该应用程序使用两个用户之间的自引用关联关系,但是当我尝试创建我得到的关联时,我无法让它工作,并且init () 错误说我向关联发送了 2 个参数刚添加时的代理 1。

我试图通过 Mychel 和 Simon 在https://groups.google.com/forum/#!topic/sqlalchemy/OeLrx74p5vY上发布的双重关联代理来实现自引用关联,并得到了有问题的错误,然后我尝试通过 SQLAlchemy 上发布的双重关系实现自引用关联,使用SingleNegationElimination 的关联配置与自我的多对多关系,并得到一个没有足够信息进行调试的 KeyError


class tutorship(db.Model):
    __tablename__ = 'tutorship_tablename'
    """Reference table of tutors and students"""
    id = db.Column(db.Integer, primary_key = True)
    studentId = db.Column(db.Integer, db.ForeignKey('user.id'))
    professorId = db.Column(db.Integer, db.ForeignKey('user.id'))
    subject = db.Column(db.String(150), nullable = False)
    date = db.Column(db.DateTime, nullable = False)
    rating = db.Column(db.Float, nullable = True)
    timeAgreed = db.Column(db.Float, nullable = False)
    comments = db.Column(db.Text, nullable = True)

    # Original try
    student = db.relationship('User', primaryjoin=(studentId == User.id), backref='to_student')
    professor = db.relationship('User', primaryjoin=(professorId == User.id), backref='from_professor')

class User(db.Model, UserMixin):
    __tablename__='user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(15), nullable=False)
    surname = db.Column(db.String(20), nullable=False)

    # Original try
    tutors = association_proxy('to_student', 'professor')
    students = association_proxy('from_professor', 'student')

        # Second try
    #students = db.relationship('tutorship', primaryjoin=(id == tutorship.studentId), backref='to_student')
    #professors = db.relationship('tutorship', primaryjoin=(id == tutorship.professorId), backref='from_professor')

@app.route('/<professorId>/<studentId>/<subject>/<date>/<timeAgreed>')
def tutorshipConfirmed(professorId, studentId, subject, date, timeAgreed):
    if (current_user.is_authenticated) and (str(current_user.id) == professorId):
        student = User.query.filter_by(id = int(studentId)).first()
        professor = User.query.filter_by(id = int(professorId)).first()
        date = datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
        # Original try
        student.tutors.append(professor)

        # Second try
        #student.professors.append(professor)
        db.session.commit()
    return redirect(url_for('home'))

我希望在两个用户之间创建一个自引用关联的实例,但在尝试时遇到了这些错误。

标签: pythonsqlalchemy

解决方案


推荐阅读