在neo4django中,有没有办法更新节点?

时间:2013-03-23 20:49:32

标签: django neo4j neo4django

我现在正在尝试使用Django + neo4django构建我的第一个Neo4j应用程序。 我觉得图书馆很酷,但现在有几个严重的问题。 (我知道,他们现在还处于开发版本。) 有没有办法更新存在节点(或修改属性值)?

neo4django - 用户文档 - neo4django 0.1.7-dev文档https://neo4django.readthedocs.org/en/latest/index.html

1 个答案:

答案 0 :(得分:0)

当然 - 就像你使用Django ORM一样。

如果你有一个模型,Person,就像这样

class Person(models.NodeModel):
    name = models.StringProperty()

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

您只需更新模型实例属性,然后保存

即可
pete.name = 'Peter'
pete.save()

你认为更多链接到Django文档,或者可能是一个示例项目,会在文档中更清楚吗?或者更多关于"写作模型"中的属性的信息;部?

编辑 - 来自评论中的新信息。

您引用的错误(ValueError: Duplicate index entries for <Model>.prop)是因为您正在尝试保存已标记为&#34; unique&#34;的模型属性,已经使用过的价值。 unique=True选项确保首先检查类型索引,如果已使用该值,则抛出错误。这是预期的行为。

考虑

class UniquePerson(models.NodeModel):
     name = models.StringProperty(indexed=True, unique=True)

>>> pete = Person.objects.create(name='Pete')
>>> peter = Person.objects.create(name='Pete')
...
ValueError: Duplicate index entries for <UniquePerson>.name
>>> pete.name = 'other pete'
>>> pete.save()
>>> peter = Person.objects.create(name='Pete')
>>> #no problem, since the original pete node now has a different name

如果您不想要这种行为,您当然可以关闭unique=True,捕获错误,或检查具有该属性的对象是否已存在,如pete = Person.objects.get(name='Pete')

编辑 - 2013年4月3日 - 发现了一个有贡献的错误。

几天前,我发现neo4django中的一个错误可能导致了你所看到的内容。它使具有unique=True属性的节点在已经保存到数据库后保存,并且无法使用类似属性更新节点。

我打开了一个问题,确保测试套件能够捕获它,并提供了一个补丁 - https://github.com/scholrly/neo4django/issues/150-希望能解决您的问题!

要从GitHub获取最新来源,您可以使用pip install -e git+https://github.com/scholrly/neo4django#egg=neo4django-dev。如果有问题,请告诉我。

豫ICP备18024241号-1