首页 > 解决方案 > 如何使用 py2neo.ogm (v3) 为不同类型的节点创建双向关系?

问题描述

我对 py2neo ogm 很陌生。我设置了两种类型的节点:用户和发布。Post 具有发布者的 user_id,并且有日志显示用户何时看到帖子。所以图表看起来像这样:

(:Post)-[:published_by ]->(:User), (:User)-[:views ]->(Post)

但我无法使用 py2neo ogm 对双向性质进行建模。我只能通过在发布之前为用户定义类来将任一帖子与用户相关联,反之亦然。

我是这样写模型的:

class User(GraphObject):
    name = Property()
    user_id = Property()

    # views = RelatedTo(Post)
    published = RelatedFrom("Post","PUBLISHED_BY")


class Post(GraphObject):
    name = Property()
    post_id = Property()

    published_by = RelatedTo(User)
    viewed_by = RelatedFrom("User","VIEWS")

由于 Post 类是在 User 之后编写的,如果我取消注释“views”关系,我会收到一个错误,因为我试图在定义它之前引用 Post。

我不确定python中是否有一些东西可以用来解决引用问题,或者ogm中是否有另一个不同的关系对象可以用于双向关系?

标签: python-3.xpy2neo

解决方案


好的,我想通了。我必须简单地在 Post 类中提供一个传入关系并使用它来引用它的关系。

这是代码:

class User(GraphObject):
    name = Property()
    user_id = Property()

    published = RelatedFrom("Post","PUBLISHED_BY")


class Post(GraphObject):
    name = Property()
    post_id = Property()

    published_by = RelatedTo(User)
    viewed_by = RelatedFrom(User,"VIEWS")

要查看哪些用户查看了帖子:

p = Post.select(graph).first()
rel = p.viewed_by
print(list(rel))

推荐阅读