复制/克隆neo4 django模型对象

时间:2013-05-25 06:31:22

标签: django-models neo4j neo4django

我想知道是否有一种聪明的方法可以在neo4django中创建一个节点的精确克隆,而无需手动复制每个属性和关系。

p = Person.create(name="John Doe")
p.connect(...)

new_p = p 

不起作用,因为new_p不是克隆(具有相同内容的新的单个节点),而是指向同一节点的不同指针。

1 个答案:

答案 0 :(得分:2)

那么你需要图中的新节点,还是Django模型的副本?

要创建具有相同属性(但不是相同的关系)和新的图形内节点的副本,您可以尝试类似

的内容
p = Person.objects.create(name="John Doe")
p2 = Person.objects.create(**p.node.properties)

对关系做同样的事情有点困难,但我过去已经做过,如果这就是你需要的话,可以写出一个要点。或者,这也可以在Gremlin或Cypher(使用neo4django的辅助函数)中完成,如果这更适合,例如

from neo4django.db import connection
p = Person._neo4j_instance(connection.gremlin('results=<some code that yields a copied node>'))

如果您只需要一个Django模型的副本,该模型是一个不同的Python对象(但仍然连接到同一节点),您可以尝试

>>> p = Person.objects.create(name="John Doe")
>>> p2 = Person.from_model(p)
>>> print p2.name
John Doe

HTH!

编辑:

我怎么能忘记 - 这里有一个包含便利的方法!

>>> john = Person.objects.create(name="John Doe")
>>> john_2 = john.copy_model()
>>> john.name == john_2.name
True

关系和属性都被复制,尽管返回的模型未保存 - 它们不共享图中的节点。

抱歉跑来跑去,也许这会更容易一些。