我有一个模型是用户,其中此模型中有一个字段,我想存储用户列表。这个想法是你可以添加炒菜并将它们存放在某个地方。
class User (db.Model):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String(50), unique = True)
email = Column(String(120), unique = True)
password = Column(String(50))
date = Column(DateTime(), default=datetime.now())
friends = "Should be a list of users"
我曾想过有一个字符串,其中包含每个用户的id,但是,是否有任何可能与同一模型的关系?像这样:
friends = relationship("User")
非常感谢!
答案 0 :(得分:2)
基于Adjacency List Relationships
的建议解决方案仅适用于某人可以成为最多一个人的朋友的情况,我认为不是现实世界中的情况。
在这种情况下,您需要应用的模式称为Self-Referential Many-to-Many Relationship。请阅读上面链接的示例。为了使其适用于您的模型,您需要创建其他表以保持朋友对,并按如下方式配置关系:
# object model
t_userfriend = Table("user_friend", Base.metadata,
Column("user_id", Integer, ForeignKey("users.id"), primary_key = True),
Column("friend_id", Integer, ForeignKey("users.id"), primary_key = True),
)
class User (Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique = True)
# ...
friends = relationship("User",
secondary = t_userfriend,
primaryjoin = (id == t_userfriend.c.user_id),
secondaryjoin = (id == t_userfriend.c.friend_id),
backref = "friend_of",
)
我想你需要问的另一个问题是,在你的模型中,如果A是B的朋友,这是否意味着B是A的朋友?如果这是真的,您可能需要/需要:
答案 1 :(得分:1)
您可以使用邻接列表关系,此链接也有同样的问题,您可以从中学习。 How to create relationship many to many in SQLAlchemy (python, flask) for model User to itself
答案 2 :(得分:0)
是的,您可以使用Adjacency List Relationships。
class User (db.Model):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String(50), unique = True)
email = Column(String(120), unique = True)
password = Column(String(50))
date = Column(DateTime(), default=datetime.now())
friends = relationship("User",
backref=backref('parent', remote_side=[id])
)