簡體   English   中英

Graphene-django返回空節點,而不是僅返回節點字段

[英]Graphene-django returns null node instead of just node field

我面臨着石墨烯和Django的奇怪問題。 該文檔似乎缺乏解決方案,我無法弄清楚自己在做什么錯。

我有以下型號:

Class Sentence(models.Model):
    ref = models.CharField(max_length=30, primary_key=True)
    body = models.TextField(default=None)

Class Summary(models.Model):
    sentence = models.ForeignKey(Sentence, on_delete=models.CASCADE)
    text = models.TextField(default=None)

(每個句子可以有多個摘要)

以及以下架構:

Class SentenceType(DjangoObjectType):
    class Meta:
        model = models.Sentence
        filter_fields = {"ref": ["exact"]}
        interfaces = (graphene.Node, )

Class SummaryType(DjangoObjectType):
    class Meta:
        model = models.Summary
        filter_field = {"text": ["icontains"]}
        interfaces = (graphene.Node, )

Class Query(graphene.ObjectType):
    all_sentences = DjangoFilterConnectionField(SentenceType)
    sentence = graphene.Field(SentenceType, ref=graphene.string(), body=graphene.string())
    all_summary = all_provvedimenti = DjangoFilterConnectionField(SummaryType)
    summary = graphene.field(SummaryType, id=graphene.Int(), text=graphene.string())

def resolve_all_summaries(self, context, **kwargs):
    return models.Summary.objects.all()

我的數據庫中可能有一個或多個摘要,但沒有相應的句子。

現在,當我查詢

{
  allSummaries{
    edges{
      node{
        text
        sentence{
          ref
        }
      }
    }
  }
}

如果該句子用於總結,則完全沒有問題。 但是如果沒有相應的句子,我會得到:

"errors": [
    {
      "message": "Sentence matching query does not exist.",
      "locations": [
        {
          "line": 6,
          "column": 9
        }
      ]
    }
],
...,
...,
"data":[
    ...,
    {
      "node": null
    },
    {
      "node":{
        "text": "blah blah blah sentence summary"
        "sentence": {
          "ref": "sentence_reference"
        }
      }
    }
    {
      "node": null
    },
    ...,
]

自然,我期望的輸出是,只要摘要節點不存在相應的句子,它仍會給我返回摘要和“句子”的文本:null或[]。

我在文檔或Google方面沒有運氣。 似乎我是唯一遇到此問題的人。 我不明白我是在Django,graphene中犯了錯誤還是只是一個錯誤。

有什么建議么?

更改此行中的all_summary變量

all_summary = all_provvedimenti = DjangoFilterConnectionField(SummaryType)

對所有allSummaries

然后在中更改函數名稱

def resolve_all_summaries(self, context, **kwargs):

以及resolve_allSummaries

然后您可以查詢:

 {
  allSummaries{
    edges{
      node{
        text
        sentence{
          ref
        }
      }
    }
  }
}

這些標識符中的所有三個都指同一事物,因此需要匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM