You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:30:36