gpt4 book ai didi

python - 覆盖 Graphite 烯中的 django 选择输出

转载 作者:太空狗 更新时间:2023-10-29 21:41:57 24 4
gpt4 key购买 nike

我正在使用 graphenegraphene-django,但我在使用带有选项的 IntegerField 时遇到了问题。 graphene 创建一个Enum,如果值为1,则输出为“A_1”;如果值为 2,则为“A_2”,依此类推。示例:

# model
class Foo(models.Model):
score = models.IntegerField(choices=((1, 1), (2, 2), (3, 3), (4, 4), (5, 5)))

# query

query {
foo {
score
}
}

# response

{
"data": {
"foo": {
"source": "A_1"
}
}
}

我找到了一个转换选项值的函数。

def convert_choice_name(name):
name = to_const(force_text(name))
try:
assert_valid_name(name)
except AssertionError:
name = "A_%s" % name
return name

assert_valid_name 有这个正则表达式:

r'^[_a-zA-Z][_a-zA-Z0-9]*$'

因此,无论以数字开头,它都会将其转换为“A_...”。

如何覆盖此输出?

最佳答案

代码注释说

GraphQL serializes Enum values as strings, however internally Enums can be represented by any kind of type, often integers.

因此,对于您的特定情况,您将无法轻松地将线上值替换为整数。但字符串 ("A_1") 表示的实际值在内部和客户端是否仍然是整数(来自字段的描述值)可能无关紧要。

通常,您可以通过定义一个枚举类并添加到 DjangoObjectType 的定义中,用选项替换自动生成的字段。这是一个使用文档枚举示例的示例...

class Episode(graphene.Enum):
NEWHOPE = 4
EMPIRE = 5
JEDI = 6

@property
def description(self):
if self == Episode.NEWHOPE:
return 'New Hope Episode'
return 'Other episode'

然后您可以将其添加到您的 DjangoObjectType

class FooType(DjangoObjectType):
score = Episode()
class Meta:
model = Foo

或者,如果您想获得额外的乐趣,您可以根据您在 Foo._meta.get_field('score').choices 中的字段选择动态生成 Enum 字段。请参见 graphene_django.converter.convert_django_field_with_choices

关于python - 覆盖 Graphite 烯中的 django 选择输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903770/

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