石墨烯 Django 没有 Django 模型?

Rob*_*_LY 5 python django django-models graphene-python

我已成功使用 Graphene-Django 成功构建了多个 GraphQL 调用。在所有这些情况下,我全部或部分填充了 Django 模型,然后返回我填充的记录。

现在我遇到一种情况,我想返回一些我不想存储在 Django 模型中的数据。这可能与石墨烯有关吗?

罗伯特

小智 5

Robert_LY 在评论中完美地回答了他自己的问题,我只是想扩展他的解决方案。

我的无数据库模型 WordForm 是自动生成的,无需将其存储在数据库中。我将其定义为 Django 模型,如下所示:

from django.db import models
class WordForm(models.Model):
    value = models.CharField(max_length=100)
    attributes = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

在架构中,我定义节点和查询,如下所示:

class WordFormNode(DjangoObjectType):
    class Meta:
        model = WordForm
        interfaces = (relay.Node, )

class Query(AbstractType):
    word_forms = List(WordFormNode,query=String(),some_id=String())

    def resolve_word_forms(self, args, context, info):
        query= args['query']
        some_id = from_global_id(args['some_id'])[1]
        word_forms = []
        # some logic to make WordForm objects with
        # WordForm(value=value,attributes=attributes),
        # then append them to list word_forms
        return word_forms
Run Code Online (Sandbox Code Playgroud)

您可以将任意数量的参数传递给列表并在resolve_word_forms 中访问它们。

  • 我真的很喜欢这个答案,因为它具有使用本机模型字段生成 graphql 字段的优点,但我得到“graphql.error. located_error.GraphQLLoatedError:resolve_word_forms()得到了意外的关键字参数'some_id'”。我使用参数格式“(root, info, **kwargs)”解决了这个问题 (2认同)

Le *_*bou 0

当您将 Django 模型映射到 GraphQL 时,它会根据 Django 模型的内省创建一个具有 GraphQL 对象类型的新模型。并且没有什么可以阻止您将此模型与普通 GraphQL 对象类型相结合,或从其他第三方映射持久化模型