运行测试遇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
相关产品推荐
相关产品推荐

