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

运行测试遇TypeError:QuestionnaireType无connection,如何解决?

问题原因与解决方案

原因

使用DjangoFilterConnectionField要求对应的GraphQL类型(此处为QuestionnaireType)必须关联有效的Connection类型。如果QuestionnaireType只是普通的DjangoObjectType,未配置Relay Node接口或生成对应的Connection类,就会触发该错误。

解决方法

方法一:自动生成Connection(推荐)

定义QuestionnaireType时,继承DjangoObjectType并指定graphene.relay.Node接口,框架会自动生成对应的Connection类型:

import graphene
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from .models import Questionnaire

class QuestionnaireType(DjangoObjectType):
    class Meta:
        model = Questionnaire
        # 启用Relay Node接口,自动生成Connection
        interfaces = (graphene.relay.Node,)
        # 可选:配置允许过滤的字段
        filter_fields = {
            'title': ['exact', 'icontains'],
            'created_at': ['gte', 'lte'],
        }

class Query(graphene.ObjectType):
    all_questionnaires = DjangoFilterConnectionField(QuestionnaireType)

方法二:手动定义自定义Connection

如果需要给Connection添加自定义字段,可以手动创建Connection类并关联:

import graphene
from graphene import relay
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from .models import Questionnaire

class QuestionnaireType(DjangoObjectType):
    class Meta:
        model = Questionnaire
        interfaces = (graphene.relay.Node,)

# 自定义Connection类
class QuestionnaireConnection(relay.Connection):
    # 可添加自定义字段,比如total_count
    total_count = graphene.Int()

    def resolve_total_count(self, info):
        return self.iterable.count()

    class Meta:
        node = QuestionnaireType

class Query(graphene.ObjectType):
    all_questionnaires = DjangoFilterConnectionField(QuestionnaireConnection)

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:50:30