Neo4J Django neomodel在浏览器中不显示节点

xt0899hw  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(135)

我是Graph数据库的新手,在Django application中使用Neo4j数据库和neomodel库。
设置定义为

NEOMODEL_NEO4J_BOLT_URL = os.environ.get('NEO4J_BOLT_URL')
NEOMODEL_SIGNALS = True
NEOMODEL_FORCE_TIMEZONE = False
NEOMODEL_ENCRYPTED_CONNECTION = True
NEOMODEL_MAX_POOL_SIZE = 50

字符串
models.py文件具有以下模型

class Person(StructuredNode):
    SEXES = {
        'm': 'Male',
        'f': 'Female',
    }

    id = properties.UniqueIdProperty()
    first_name = properties.StringProperty(unique_index=True, required=True, max_length=100)

    gender = properties.StringProperty(choices=SEXES, required=True)


在Django shell python manage.py shell中,创建一个节点作为

>>> from family_tree.models import Person
>>> person = Person(first_name='Anuj', gender='m')
>>> person.save()
<Person: {'id': '572d0b8ff3a8402ba58c4a03cace78ba', 'first_name': 'Anuj', 'middle_name': None, 'last_name': None, 'gender': 'm', 'date_of_birth': None, 'date_of_death': None, 'created': datetime.datetime(2023, 6, 24, 7, 44, 26, 223871, tzinfo=<UTC>)}>


但数据库资源管理器中没有节点。


的数据
此外,刷新节点会导致DoesNotExist异常

>>> person.refresh()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.9/site-packages/neomodel/core.py", line 616, in refresh
    raise self.__class__.DoesNotExist("Can't refresh non existent node")
neomodel.core.PersonDoesNotExist: (PersonDoesNotExist(...), "Can't refresh non existent node")

hec6srdp

hec6srdp1#

问题是在Person类中设置id。这是一个由neomodel内部设置的特殊字段。
根据https://neomodel.readthedocs.io/en/latest/properties.html

  • neo4j中的所有节点都有一个内部id(可以通过neomodel中的'id'属性访问),但是这些不应该被应用程序使用。Neomodel提供了UniqueIdProperty来为节点生成唯一标识符(具有唯一索引)*

如果您将代码更改为使用uid(或任何其他字段名称)而不是id,则可以正常工作。

相关问题