- Пользователь должен иметь только одна роль в одном проекте
- Пользователь может иметь разные роли в разных проектах
- Пользователь может быть частью несколько проектов (которые могут содержать тысячи документов)
Код: Выделить всё
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(60), index=True, unique=True)
user_project_roles = relationship('UserProjectRoleLink', back_populates='user')
class Project(db.Model):
__tablename__ = 'device'
id = db.Column(db.Integer, primary_key=True)
project_name = db.Column(db.String(60), unique=True)
user_project_roles = relationship('UserProjectRoleLink', back_populates='project')
documents = relationship('Document', back_populates='project') # thousands of documents
class Document(db.Model)
__tablename__ = 'device'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
text =db.Column(db.String(60))
project = relationship('Project', back_populates="documents")
class Role(db.Model):
__tablename__ = "role"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
user_project_roles = relationship('UserProjectRoleLink', back_populates='role')
class UserProjectRoleLink(db.Model):
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
project_id = Column(Integer, ForeignKey('project.id'), primary_key=True)
role_id = Column(Integer, ForeignKey('role.id'), primary_key=True)
user = relationship('User', back_populates='user_project_roles')
role = relationship('Role', back_populates='user_project_roles')
project = relationship('Project', back_populates='user_project_roles')
Код: Выделить всё
project_id
Как я могу загрузить сведения о роли, а также сведения о проекте в рамках одного и того же выбора, но не загружать тысячи документов?
в моем Rest API я хотел бы ответить, например, ответом пользователя, например:
Код: Выделить всё
{
"id": 234,
"username": "JohnDoe",
"project_roles":[
{
"project_name":"Project 1",
"project_id": 1,
"role:"Admin",
"role_id": 1
},
{
"project_name":"Project 2",
"project_id": 2,
"role:"User",
"role_id": 2
}
]
}
Также со стороны проекта я хотел бы узнать, какой пользователь имеет доступ к конкретному проекту и с какими ролями
projectResult:
Код: Выделить всё
{
"id":2,
"project_name":"Project 1",
"users":[
{
"user_id": 234,
"user_name": JohnDoe,
"role":"Admin",
"role_id: "1",
}
]
}
Я также думал о вторичных объединениях, но безуспешно
Подробнее здесь: https://stackoverflow.com/questions/782 ... lationship