Python GraphQL如何声明自引用石墨烯对象类型

时间:2019-10-30 11:18:39

标签: python recursion graphql

我有一个Django模型,该模型具有与自身相关的外键,我想将此模型表示为石墨烯ObjectType

我知道使用graphene_django库中的DjangoObjectType做到这一点很简单。

我正在寻找一种不使用graphene_django的优雅python解决方案。

我要代表的模型的例子

# models.py
class Category(models.Model):
    name = models.CharField(unique=True, max_length=200)
    parent = models.ForeignKey(
        'self', on_delete=models.SET_NULL, null=True, blank=True,
        related_name='child_category')

以下模式显然无法缩放,并且ParentCategoryType没有parent字段,因此严格来说它并不是CategoryType的父级。

# schema.py
class ParentCategoryType(graphene.ObjectType):
    id = graphene.types.uuid.UUID()
    name = graphene.String()

class CategoryType(graphene.ObjectType):
    id = graphene.types.uuid.UUID()
    name = graphene.String()
    parent = graphene.Field(ParentCategoryType)

下面的代码给出了CategoryType未定义的错误。

#schema.py
class CategoryType(graphene.ObjectType):
    id = graphene.types.uuid.UUID()
    name = graphene.String()
    parent = graphene.Field(CategoryType)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

做完一些研究后,我遇到了一个GitHub issue对此进行跟踪。答案似乎是here。我自己尝试过,并且有效。因此,根据您的情况,您只需将代码更改为读取parent = graphene.Field(lambda: ParentCategoryType)parent = graphene.Field(lambda: CategoryType)