Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解析具有多对多关系的石墨烯django节点场_Django_Graphql_Graphene Python - Fatal编程技术网

如何解析具有多对多关系的石墨烯django节点场

如何解析具有多对多关系的石墨烯django节点场,django,graphql,graphene-python,Django,Graphql,Graphene Python,当我尝试解析具有多对多关系的节点字段时,会得到“Received Compatible instance error”。我需要帮助来解决这个问题。我列出了graphene django中的模型、graphql类型,以供参考 我使用的代码版本: graphene django版本:2.2.0 python版本:3.5.2 django版本:(2,0,8,'最终版',0) 我获得了Model B字段的数据,但ModelLink显示了以下错误: "errors": [ { "m

当我尝试解析具有多对多关系的节点字段时,会得到“Received Compatible instance error”。我需要帮助来解决这个问题。我列出了graphene django中的模型、graphql类型,以供参考

我使用的代码版本:
graphene django版本:2.2.0
python版本:3.5.2
django版本:(2,0,8,'最终版',0)

我获得了Model B字段的数据,但ModelLink显示了以下错误:

"errors": [
    {
        "message": "Received incompatible instance \"[None, None]\"."
    },
    {
        "message": "Received incompatible instance \"[]\"."
    }
]

我需要帮助来解析多对多关系节点字段。

由于没有使用上下文,我将提到以下内容

DjangoObjectType
有一个很好的特性-您可以使用纯django模型实例来代替它,并且:

  • 解析结束时,它将转换为graphql类型
  • self
    中的
    resolve.*
    方法将是实际的django模型
  • 所以你可以用它:

    modelARecs = [rel.model_a for rel in self.modelamodelb_set.all()]
    
    而不是:

    modelB = ModelB.objects.get(id=self.id)
    modelaIDs = modelB.modelamodelb_set.select_related('model_a').values_list('model_a_id', flat=True)
    modelARecs = ModelA.objects.filter(id__in=modelaIDs)
    

    只需返回django model
    DjangoObjectType
    ,就可以了。

    上下文如下。模型A和B有一个带有透视表AB的MTM rel。模型B有一个对A记录列表的引用,所以我试图获取模型A的记录列表以匹配B记录。我确实按照您的建议替换了代码,但仍然收到不兼容的实例错误,显示了模型名称和值。我确实找到了一个解决方案,就是不要在模型B节点中向模型a添加引用字段,即在上面的示例中删除模型链接。在查询模型B节点时,您将能够使用模型_链接自动获取模型A的记录,因为它已经在模型A中被引用。
    modelB = ModelB.objects.get(id=self.id)
    modelaIDs = modelB.modelamodelb_set.select_related('model_a').values_list('model_a_id', flat=True)
    modelARecs = ModelA.objects.filter(id__in=modelaIDs)