【问题标题】:How to extend Relationship class in neo4django如何在 neo4django 中扩展关系类
【发布时间】:2013-04-25 14:58:00
【问题描述】:

我发现关系属性还没有在 neo4django 中实现。 this thread 中公开的解决方法是为每个与属性的关系创建一个新的节点类型。

我负担不起太多的计算,所以我不想使用这种技术。在阅读source code 时,我看到,作为Relationship 类的文档字符串,这是:"""Extend to add properties to relationships."""

我的问题是,如何做到这一点?从哪里开始添加至少一个属性?

谢谢

【问题讨论】:

  • 可能会在项目中提出问题并获得创作者的帮助?

标签: python neo4j neo4django


【解决方案1】:

尽管有文档字符串,这仍然是open issue- 实际上是该项目最古老的。您可能有办法通过扩展 RelationshipBoundRelationship 来解决这个问题,但在我能够关闭该问题之前,这并不容易。

我认为这个问题可能不会成为使用该项目的瓶颈,因为您可以为节点存储提供 Neo4j 比关系存储更多的内存来解决它。当然是 YMMV。

不过,我知道这感觉像是一种黑客行为。如果您确实需要自定义关系属性,最短路径可能会下降到 REST 客户端级别。要创建与属性的关系,您可以执行类似的操作

class Person(NodeModel):
  name = StringProperty()
  friends = Relationship('self', rel_type='friends_with')

pete = Person.objects.create(name='Pete')
dave = Person.objects.create(name='Dave')

# from the neo4j-rest-client [docs][2]
pete.node.relationships.create("friends_with", dave.node, since=123456789, introduced_at="Christmas party")

WDYT?

【讨论】:

  • 谢谢@Matt,是否可以在课堂上做到这一点?喜欢self.node.relationships.create(...)
  • 当然。您也可以在 Manager 中执行此操作。如果您需要更多功能或希望一些自定义关系过滤与您的属性一起使用,您可以尝试类似 gist.github.com/bramd/5460611#file-models-py-L72 的方法。 (注意 - 在该示例中,他使用的是 Cypher,而 node 变量最好命名为 instance 以将其标记为模型实例,而不是 REST 客户端节点对象)
  • 如果您分享一些域详细信息或激励示例,我很乐意提供更量身定制的要点 :)
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2014-09-13
  • 2014-05-14
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多