I have a confusion using backref in Flask SQLAlchemy database tables

Viewed 163

models.py

@login_manager.user_loader
def load_user(username):
    return User.query.get(username)

class User(db.Model,UserMixin):
    __tablename__ = 'user_accounts'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(50),unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20),default='default.jpg')
    password = db.Column(db.String(80), nullable=False)
    task = db.relationship('Tasks', backref='author', lazy=True)

    def __repr__(self):
        return f'User <{self.id}> {self.username}'

class Tasks(db.Model):
    __tablename__ = 'tasks'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text)
    user = db.Column(db.String(50),db.ForeignKey('user_accounts.username'),nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.datetime.utcnow,nullable=False)
    completed = db.Column(db.Boolean,default=False,nullable=False)

    def __repr__(self):
        return f'{self.title} by {self.user} ({self.date_created})'

Error:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'tasks.author' could not find table 'user' with which to generate a foreign key to target column 'username'

Here I have a problem that when I trying to run db.create_all() in terminal I am getting the above error message. I am a bit confused in the usage of backref for db.relationship as my target is to represent a user could have specific task and a task is owned by that user so may I ask how could I properly organize the relationship between two tables in order to create a table with no error messages?

0 Answers
Related