我现在正在尝试使用 Django + neo4django 构建我的第一个 Neo4j 应用程序。我觉得图书馆很酷,但现在有几个严重的问题。(我明白,他们现在仍在开发版本中。)有没有办法更新现有节点(或修改属性值)?
neo4django - 用户文档 — neo4django 0.1.7-dev 文档https://neo4django.readthedocs.org/en/latest/index.html
我现在正在尝试使用 Django + neo4django 构建我的第一个 Neo4j 应用程序。我觉得图书馆很酷,但现在有几个严重的问题。(我明白,他们现在仍在开发版本中。)有没有办法更新现有节点(或修改属性值)?
neo4django - 用户文档 — neo4django 0.1.7-dev 文档https://neo4django.readthedocs.org/en/latest/index.html
当然——就像使用 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
) 是因为您尝试使用已使用的值保存标记为“唯一”的模型属性。该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
. 让我知道是否可以解决它。