首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在neo4django中,有什么方法可以更新节点吗?

在neo4django中,有什么方法可以更新节点吗?
EN

Stack Overflow用户
提问于 2013-03-24 04:49:32
回答 1查看 169关注 0票数 1

我现在正在尝试用Django + neo4django构建我的第一个Neo4j应用。我觉得这个库很酷,但现在有几个严重的问题。(我知道,它们现在还在开发版本中。)有没有办法更新exists节点(或修改属性值)?

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

EN

回答 1

Stack Overflow用户

发布于 2013-03-24 08:46:37

当然--就像Django ORM一样。

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

代码语言:javascript
复制
class Person(models.NodeModel):
    name = models.StringProperty()

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

您可以简单地更新模型实例属性,并保存

代码语言:javascript
复制
pete.name = 'Peter'
pete.save()

你认为更多到Django文档的链接,或者可能是一个示例项目,会在文档中更清楚地说明这一点吗?或者在“编写模型”部分中提供更多关于属性的信息?

编辑-从注释中的新信息开始。

您引用的错误(ValueError: Duplicate index entries for <Model>.prop)是因为您试图使用已使用的值保存已标记为“唯一”的模型属性。unique=True选项确保首先检查类型索引,如果该值已被使用,则抛出错误。这是预期的行为。

考虑一下

代码语言:javascript
复制
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')

EDIT - 4/3/13 -发现了一个重要的bug。

几天前,我在neo4django中发现了一个bug,可能导致了你所看到的结果。它阻止了具有unique=True属性的节点在已经保存到数据库之后被保存,并使得无法使用这样的属性更新节点。

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

要从GitHub获取最新的源代码,可以使用pip install -e git+https://github.com/scholrly/neo4django#egg=neo4django-dev。如果这解决了问题,请让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15591894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档