gpt4 book ai didi

django - 结合 DjangoObjectType 和 ObjectType

转载 作者:行者123 更新时间:2023-12-04 16:07:09 25 4
gpt4 key购买 nike

我有一个简单的 Django 模型,带有一个计算属性字段 clicks。该模型如下所示:

class Link(models.Model):
url = models.URLField()

@property
def clicks(self):
"""
Property does some calculations and returns a list of dictionaries:

"""
# removed calculation for simplicity
return [{'dt': 1, 'clicks': 100}, {'dt': 2, 'clicks': 201}]

我想让这个模型在我的 graphql 端点中可访问。所以我创建了以下类型和查询:

class Stats(graphene.ObjectType):
clicks = graphene.String()
dt = graphene.String()


class LinkType(DjangoObjectType):
clicks = graphene.List(Stats, source='clicks')

class Meta:
model = Link


class Query(object):
link = graphene.Field(LinkType, id=graphene.Int())

def resolve_link(self, info, **kwargs):
id = kwargs.get('id')
url = kwargs.get('url')
if id is not None:
return Link.objects.get(pk=id)
return None

现在我应该能够在我的 graphql 浏览器中使用以下查询:

{
link(id: 3) {
id,
url,
clicks{
clicks,
dt
}
}
}

我的预期结果是这样的:

{
id: 3,
url: "www.google.de",
clicks: [
dt: 1, clicks: 100},
dt: 2, clicks: 201}
]
}

但是clicksdt的嵌套值为null:

{
id: 3,
url: "www.google.de",
clicks: [
dt: null, clicks: null},
dt: null, clicks: null}
]
}

那么我在这里做错了什么?如何将字典列表转换为 Graphite 烯中的对象类型?

编辑:

我使用了@mark-chackerian answer 的修改版本来解决这个问题:似乎我对 Graphite 烯的“魔力”期望过高,我必须明确地告诉它每个领域是如何解决的。

class Stats(graphene.ObjectType):
clicks = graphene.String()
dt = graphene.String()

def resolve_clicks(self, info):
return self['clicks']

def resolve_dt(self, info):
return self['dt']

最佳答案

你必须更明确地告诉 Graphite 烯如何制作你的 Stats 对象列表。

尝试这样的事情:

class LinkType(DjangoObjectType):
clicks = graphene.List(Stats)

class Meta:
model = Link

def resolve_clicks(self, info):
return [Stats(dt=click_dict['dt'], clicks=click_dict['clicks') for click_dict in self.clicks]

关于django - 结合 DjangoObjectType 和 ObjectType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com