Neomodel中UniqueIdProperty类型参数不支持错误求助
问题原因
你同时使用了@dataclass装饰器和neomodel的StructuredNode,两者的属性定义逻辑冲突导致错误。dataclass会将UniqueIdProperty()直接作为id字段的默认实例保存,而不是让neomodel在对象实例化时自动生成并赋值唯一ID。当调用save()时,Neo4j驱动无法识别UniqueIdProperty类型的参数,从而抛出TypeError。
解决方案
直接移除@dataclass(kw_only=True)装饰器即可,因为neomodel的StructuredNode已经内置了数据类的核心功能(支持关键字参数实例化、属性访问等),不需要额外的dataclass装饰。
修改后的模型代码:
from __future__ import annotations from typing import TYPE_CHECKING from neomodel import StructuredNode, UniqueIdProperty, RelationshipTo, cardinality, StringProperty from open_precision.core.model import DataModelBase if TYPE_CHECKING: from open_precision.core.model.path import Path class Course(StructuredNode, DataModelBase): id: str = UniqueIdProperty() name: str = StringProperty(required=True) description: str = StringProperty(required=False) CONTAINS: RelationshipTo = RelationshipTo('open_precision.core.model.path.Path', 'CONTAINS', cardinality=cardinality.ZeroOrMore)
验证
原来的触发代码无需修改,运行后UniqueIdProperty会自动为id字段生成唯一值,保存到Neo4j时可正常序列化:
course = Course(name="test", description="bla") course.save() print(course.id) # 输出自动生成的唯一ID
内容的提问来源于stack exchange,提问作者LarsJaeger
相关产品推荐
相关产品推荐

