首页 > 解决方案 > flask-sqlalchemy 中有没有办法使可继承的属性成为外键?

问题描述

from app import db
from app import Bcrypt

#all users in the database
class User(db.Model):
    user_name = db.Column(db.String(30), primary_key=True, unique=True, nullable=False)
    password_hash = db.Column(db.String(30), unique=False, nullable=False)
    _title = db.Column(db.String(30), unique=False, nullable=False)
    team_name = db.Column(db.String(30), unique=False, nullable=False)
    dep_name = db.Column(db.String(30), unique=False, nullable=False)
    _active = db.Column(db.Boolean, unique=False, nullable=False, default=1)
    _permission = db.Column(db.String(30), unique=False, nullable=False, default="USER")
    owner=db.relationship('Employee', backref='owned_user', lazy=True)
    #getter
    @property 
    def password(self):
        return self.password
    #setter
    @password.setter
    def password(self, plain_text_password):
        self.password_hash = Bcrypt.generate_password_hash(plain_text_password).decode('utf-8')
    def __repr__(self):
        return "<User(name='%s', title='%s', team='%s', dep='%s', active='%s', permission='%s')>" % (self.usr_name, self.usr_email)

#employee in shift
class Employee(User):
    _id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    emp_name = db.Column(db.String(30), db.ForeignKey('user.user_name'))
    shifts_options = db.Column(db.Integer(), unique=False, nullable=False)
    shifts_amount = db.Column(db.Integer(), unique=False, nullable=False)
    count_shabbat = db.Column(db.Integer(), unique=False, nullable=False)
    shift = db.relationship('Shift', backref='owned_employee', lazy=True)

#specific shift
class Shift(db.Model):
    #add each shift an id: date + shift name: 01/07/21SundayMorning
    _id = db.Column(db.String(30), primary_key=True, unique=True, nullable=False)
    _date = db.Column(db.Date(), primary_key=True, unique=False, nullable=False)
    day_name = db.Column(db.String(length=30), nullable=False, unique=False)
    shift_type = db.Column(db.String(length=30), nullable=False, unique=False)
    owners_emp = db.Column(db.String(30), db.ForeignKey('employee.user_name'))

def __repr__(self):
    return f'Shift{self.name}'

我收到此错误:

引发 exc.NoReferencedColumnError(sqlalchemy.exc.NoReferencedColumnError:无法初始化表 'shift' 上 ForeignKey 'employee.user_name' 的目标列:表 'employee' 没有名为 'user_name' 的列

标签: python-3.xflask-sqlalchemymultiple-inheritance

解决方案


推荐阅读