如何在graphene-django中使用MultipleChoiceFilter?
Posted
技术标签:
【中文标题】如何在graphene-django中使用MultipleChoiceFilter?【英文标题】:How to use MultipleChoiceFilter in graphene-django? 【发布时间】:2021-02-07 13:59:31 【问题描述】:我有一个带有 graphql 端点的 Django 应用程序。我需要能够通过某个字段的多个值一次过滤对象。
我有以下石墨烯方案:
class ChannelFilter(FilterSet):
type = MultipleChoiceFilter(choices=Channel.TYPES)
class Meta:
model = Channel
fields = ['type']
class ChannelNode(DjangoObjectType):
class Meta:
model = Channel
filter_fields = ['type']
interfaces = (relay.Node,)
class Query(graphene.ObjectType):
channels = DjangoFilterConnectionField(
ChannelNode, filterset_class=ChannelFilter
)
schema = graphene.Schema(query=Query)
然后我尝试了以下 graphql 查询来过滤我的对象:
query
channels(type: "BOT")
edges
node
id
结果出现如下错误:
"errors": [
"message": "['\"type\": [\"message\": \"Enter a list of values.\", \"code\": \"invalid_list\"]']",
"locations": [
"line": 2,
"column": 3
],
"path": [
"channels"
]
],
"data":
"channels": null
query
channels(type: ["BOT"])
edges
node
id
结果出现如下错误:
"errors": [
"message": "Argument \"type\" has invalid value [\"BOT\"].\nExpected type \"String\", found [\"BOT\"].",
"locations": [
"line": 2,
"column": 18
]
]
如何正确使用MultipleChoiceFilter?谢谢
【问题讨论】:
【参考方案1】:您可能需要将表单字段转换器注册为
import graphene
from graphene_django.forms.converter import convert_form_field
from django_filters.fields import MultipleChoiceField
@convert_form_field.register(MultipleChoiceField)
def convert_multiple_choice_filter_to_list_field(field):
return graphene.List(graphene.String, required=field.required)
然后使用 channels(type: ["BOT"])
符号进行过滤。
重要提示
您可以将注册码 sn-p 放在任何地方,但是,确保它在服务器启动时被执行。
【讨论】:
以上是关于如何在graphene-django中使用MultipleChoiceFilter?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?
如何在 graphene-django GraphQLTestCase 中使用 django-grahql-jwt 进行身份验证?
如何使用 graphene-django 定义突变的自定义输出类型?