Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django models 复制/关闭neo4django模型对象_Django Models_Neo4j_Neo4django - Fatal编程技术网

Django models 复制/关闭neo4django模型对象

Django models 复制/关闭neo4django模型对象,django-models,neo4j,neo4django,Django Models,Neo4j,Neo4django,我想知道是否有一种聪明的方法可以在neo4django中创建节点的精确克隆,而不必手动复制每个属性和关系 p = Person.create(name="John Doe") p.connect(...) new_p = p 不起作用,因为new\p不是克隆(一个新的、具有相同内容的单个节点),而是指向同一节点的不同指针。那么您需要在图中创建一个新节点,还是Django模型的副本 要创建具有相同属性(但不具有相同关系)的副本和新的in-graph节点,可以尝试以下操作 p = Person

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

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

new_p = p 

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

那么您需要在图中创建一个新节点,还是Django模型的副本

要创建具有相同属性(但不具有相同关系)的副本和新的in-graph节点,可以尝试以下操作

p = Person.objects.create(name="John Doe")
p2 = Person.objects.create(**p.node.properties)
在人际关系上做同样的事情有点困难,但我过去也做过,如果你需要的话,我可以写一个要点。或者,如果更适合的话,也可以使用Gremlin或Cypher(使用neo4django的helper函数)来完成,例如

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

编辑:

我怎么会忘记呢?这里有一个方便的方法

>>> john = Person.objects.create(name="John Doe")
>>> john_2 = john.copy_model()
>>> john.name == john_2.name
True
关系和属性都被复制,尽管返回的模型未保存-它们在图中不共享节点


很抱歉绕圈子,也许这会容易一点

实际上,我最终希望在图中有一个新节点。但是,我想在保存新节点之前编辑(一些)属性(和关系)。因此您的第一个建议(**p.node.properties)会有所帮助。我会很感激为属性提供的要点(或者可以通过for…in循环实现更多或更少?)它基本上是
Person.\u meta.fields
列表中的字段循环。作为
neo4django.db.models.relationships.MultipleNodes
SingleNode
的子类的字段是关系的多个和一个方面的字段,您可以获得类似于其名称的内容。如果还不够清楚,我会发布一个要点——如果是ha,我会感到惊讶。
>>> john = Person.objects.create(name="John Doe")
>>> john_2 = john.copy_model()
>>> john.name == john_2.name
True