我正在尝试使用graphene-django DjangoFilterConnectionField
来实现以下目标:
{
allUsers(username_Icontains: "abc") {
edges {
node {
id
demographics (name_Icontains: "xyz") {
id
name
}
}
}
}
}
我知道在石墨烯django中,可以使用graphene's List进行嵌套过滤
但我不确定我是否可以使用DjangoFilterConnectionField
解决这个问题。
我有以下石墨烯(继电器)架构:
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个嵌套节点执行此操作。
答案 0 :(得分:0)
我认为你在这两个模型之间有OneToOneField,如果它是真的,你就不能拥有这样的东西,因为它不合逻辑
想象一下,如果用户拥有受众特征,并且您检索了所有用户,那么对于每个用户,我们都有一个受众特征,过滤一个受众特征是不合逻辑的。唯一的方法是使用UserNode过滤它(正如你所说和所做的那样)
如果你有一个ForeignKey或ManyToManyField到用户模型,嵌套过滤就可以工作了,然后你可以在用户中使用单独的过滤器检索它
我希望我能够向你说清楚