I am having a problem using db.relationships. I noticed that to use relationships in my queries, each models that references another through a relationship has to be aware of that model (through imports as in my example below). All my models are in separate files, so I am afraid I will face circular dependency issues. Can any suggest to me how to overcome this constraints.
from .models.role import Role
class User(db.Model, BaseModel):
__tablename__ = 'user'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
first_name = db.Column(String(255), nullable=False)
last_name = db.Column(String(255), nullable=False)
email = db.Column(String(255), nullable=False)
role_id = db.Column(UUID(as_uuid=True), db.ForeignKey('role.id'), nullable=False)
role = db.relationship("Role", back_populates="user")
from .models.user import User
class Role(db.Model):
__tablename__ = 'role'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = db.Column(String(60), nullable=False)
description = db.Column(String(255), nullable=True)
users = db.relationship('User', back_populates='role')
In my Role class, I had defined a users relationship, but I was referring to it as user in the back_populates of the User class. I have fixed the mismatch. Here's the correct definition.
class User(db.Model):
__tablename__ = 'user'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = db.Column(String(255), nullable=False)
role_id = db.Column(UUID(as_uuid=True), db.ForeignKey('role.id'), nullable=False)
role = db.relationship('Role', back_populates='users')
def serialize(self):
return {
'name': self.name
}