gpt4 book ai didi

python - Graphene-Django 嵌套过滤器(中继)

转载 作者:行者123 更新时间:2023-11-28 19:03:53 29 4
gpt4 key购买 nike

我正在尝试使用 graphene-django 的 DjangoFilterConnectionField 实现以下目标:

{
allUsers(username_Icontains: "abc") {
edges {
node {
id
demographics (name_Icontains: "xyz") {
id
name
}
}
}
}
}

我知道在 graphene django 中,可以使用 graphene's List 进行嵌套过滤但我不确定我是否可以使用 DjangoFilterConnectionField 解决这个问题。

我有以下 Graphite 烯(中继)模式:

class UserNode(DjangoObjectType):
class Meta:
model = User
interfaces = (Node,)
filter_fields = {
'username': ['exact', 'icontains', 'in'],
}

class DemographicNode(DjangoObjectType):
class Meta:
model = Demographic
interfaces = (Node,)
filter_fields = {
'name': ['icontains'],
}

class Query(ObjectType):

user = Node.Field(UserNode)
all_users = DjangoFilterConnectionField(UserNode)

demographic = Node.Field(DemographicNode)
all_demographics = DjangoFilterConnectionField(DemographicNode)

docs建议在连接的节点上也引入每个过滤器。所以它会是这样的:

class UserNode(DjangoObjectType):
class Meta:
model = User
interfaces = (Node,)
filter_fields = {
'username': ['exact', 'icontains', 'in'],
'demographic__name': ['icontains']
}

但我认为必须有更好的方法来执行此操作,因为我必须对超过 20 个嵌套节点执行此操作。

最佳答案

我认为你在这两个模型之间有 OneToOneField,如果它是真的,你不能有类似的东西,因为它不合逻辑

想象一下,如果一个用户有一个人口统计数据,而您检索了所有用户,那么对于每个用户,我们都有一个人口统计数据,过滤一个人口统计数据是不合逻辑的。唯一的方法是用 UserNode 过滤它(正如你所说和所做的)

如果您有一个 ForeignKey 或 ManyToManyField 到用户模型,嵌套过滤就可以工作,然后您可以使用单独的过滤器在用户中检索它

我希望我已经向你解释清楚了

关于python - Graphene-Django 嵌套过滤器(中继),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49326217/

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