1

私は今、Django + neo4django で最初の Neo4j アプリを構築しようとしています。ライブラリはクールだと思いますが、今のところ深刻な問題がいくつかあります。(私は理解しています、彼らはまだ開発中のバージョンです。) 既存のノードを更新する (またはプロパティ値を変更する) 方法はありますか?

neo4django - ユーザー ドキュメント — neo4django 0.1.7-dev ドキュメントhttps://neo4django.readthedocs.org/en/latest/index.html

4

1 に答える 1

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) は、「一意」としてマークされたモデル プロパティを、既に使用されている値で保存しようとしているためです。この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')

編集 - 4/3/13 - 寄与するバグが見つかりました。

数日前、neo4django にバグが見つかりました。これが、あなたが見ているものにつながった可能性があります。プロパティを持つノードがunique=Trueデータベースに保存された後に保存されないようにし、そのようなプロパティを持つノードを更新することを不可能にしました。

問題を開き、テストスイートがそれをキャッチすることを確認し、パッチを提供しました - https://github.com/scholrly/neo4django/issues/150 -うまくいけば、あなたの問題が解決します!

GitHub から最新のソースを取得するには、pip install -e git+https://github.com/scholrly/neo4django#egg=neo4django-dev. それが修正されるかどうか教えてください。

于 2013-03-24T00:46:37.260 に答える