Vel*_*dan 6 django relay graphql graphene-django
当我们执行中继查询时,如何接收存储在数据库中的本地模型 ID(例如 django 模型 ID)?中继定义它自己的 ID 的主要问题所以我不确定我们如何正确处理它。
例如。
query {
allFuelTypes (codeMatch: "g") {
edges {
node {
id,
code,
label
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
将打印
{
"data": {
"allFuelTypes": {
"edges": [
{
"node": {
"id": "RnVlbFR5cGVOb2RlOjM=",
"code": "g",
"label": "Gas"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中id是石墨烯中继 ID,但我想查看模型 ID。
我看到的唯一一种可能的方法是在石墨烯模式中为模型 ID 字段创建一些别名,并从 Django 模型中手动获取此 ID。但也许存在一些更动态的方式来实现相同的结果?
谢谢你的帮助!
PS查询的实现并不重要。这只是一个虚拟演示
这对我有用!
让我们定义一个简单的模型:
class Account(models.Model):
name = models.CharField(max_length=100)
class Meta:
ordering = ['id']
Run Code Online (Sandbox Code Playgroud)
现在让我们定义其对应的中继节点:
class AccountNode(DjangoObjectType):
# just add this line
id = graphene.ID(source='pk', required=True)
class Meta:
model = Account
interfaces = (relay.Node, )
Run Code Online (Sandbox Code Playgroud)
将其附加到您身上 查询:
class Query(ObjectType):
all_accounts = DjangoFilterConnectionField(AccountNode)
Run Code Online (Sandbox Code Playgroud)
提出您的要求:
您可以为 pk 定义自定义字段,这里是 user 的示例。
from django.contrib.auth import get_user_model
import graphene
from graphene_django.types import DjangoObjectType
from graphene_django.filter.fields import DjangoFilterConnectionField
class UserNode(DjangoObjectType):
class Meta:
model = get_user_model()
interfaces = (graphene.relay.Node,)
pk = graphene.Int()
def resolve_pk(self, info):
return self.pk
class UserQuery(graphene.ObjectType):
user = graphene.relay.Node.Field(UserNode)
users = DjangoFilterConnectionField(UserNode)
class Query(UserQuery, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)
然后你可以这样查询:
query {
users{
edges {
node {
pk
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看其他示例。