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

咨询:Django Graphene未包含模型中名为type的字段问题

问题分析

你遇到的这个情况太典型了——type是GraphQL和Graphene-Django的保留关键字,自动生成DjangoObjectType的时候,框架会自动跳过这个字段,避免和GraphQL内置的__type元字段冲突。这就是为什么你在Resolver里能拿到值,但GraphiQL里却提示“无法查询该字段”的核心原因。

解决办法

这里有两种可行的方案,你可以根据需求选择:

方案1:重命名GraphQL字段(推荐)

最简单的方式是给GraphQL里的字段换个名字,映射到模型的type字段,比如叫post_type:

from graphene_django import DjangoObjectType
import graphene
from .models import Post

class PostType(DjangoObjectType):
    # 显式定义字段,source指向模型的type字段
    post_type = graphene.Field(graphene.String, source='type')

    class Meta:
        model = Post
        # 要么用__all__,要么列出需要的字段(包括post_type)
        fields = "__all__"

之后你在GraphiQL里查询post_type就能拿到模型中type字段的值了,完全避开关键字冲突。

方案2:强制保留type字段名

如果你一定要在GraphQL里用type作为字段名,那需要手动定义字段和Resolver,绕开自动生成的逻辑:

class PostType(DjangoObjectType):
    # 手动定义type字段
    type = graphene.Field(graphene.String)

    # 自定义Resolver返回模型的type值
    def resolve_type(self, info):
        return self.type

    class Meta:
        model = Post
        # 排除自动生成的type字段,避免冲突
        exclude = ('type',)

这样框架就不会自动处理type字段,而是用你自定义的Resolver来返回值。

额外排查点

如果上面的方案没解决,你可以再检查这两个地方:

  • 确认模型里的type字段没有设置editable=False或者其他特殊元选项,导致Graphene无法识别(不过你说和issuer字段一致,这个可能性很低);
  • 检查DjangoObjectType的Meta类里,是不是不小心把type加到了exclude列表里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:05