如何使用py2neo.ogm(v3)为不同类型的节点创建双向关系?

时间:2019-08-28 06:31:24

标签: python-3.x py2neo

我对py2neo ogm非常陌生。我已经设置了2种类型的节点:User&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之后编写的,因此如果取消注释“视图”关系,则会出现错误,因为在定义Post之前我试图引用Post。

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

1 个答案:

答案 0 :(得分:0)

好的,我知道了。我只需要在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))