代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

django graphql graphene从返回值中删除冗余查询

  •  1
  • Alfa Bravo  · 技术社区  · 7 年前

    最近几天我读了很多关于图形的书,以至于我再也看不到森林里的树了。

    这个人一开始得到的结果几乎正是我想要的(他的问题,而不是他的解决方案),但似乎很多代码都被弃用了,我似乎无法让它正常工作: link

    我有一堆集装箱要还。所有的集装箱里都有每天的数量。我只想退回某一天的金额。

    目前,我确实返回这些结果(天),但所有其他结果(天)也返回空值。

    当前行为:

    {
      "data": {
        "listProductcontainers": [
          {
            "id": "1",
            "productid": {
              "productid": "CBG2",
              "processedstockamountsSet": [
                {
                  "timeStampID": {
                    "id": "2"
                  },
                  "id": "77745",
                  "prodName": {
                    "productid": "CBG2"
                  }
                },
                {
                  "timeStampID": null,   <--------
                  "id": "89645",
                  "prodName": {
                    "productid": "CBG2"
                  }
                },
                {
                  "timeStampID": null,   <--------
                  "id": "89848",
                  "prodName": {
                    "productid": "CBG2"
                  }
                },
    
    // ...
    

    请求的行为:(具有“null”的所有值都不应返回)

    {
      "data": {
        "listProductcontainers": [
          {
            "id": "1",
            "productid": {
              "productid": "CBG2",
              "processedstockamountsSet": [
                {
                  "timeStampID": {
                    "id": "2"
                  }
    

    我正在运行的查询如下所示:

    query{
      listProductcontainers{
        id
        productid{
          productid
          processedstockamountsSet{
            timeStampID(id:2){
              id
            }
            id
            prodName{
              productid
            }
          }
        }
      }
    }
    

    以下是结果的相关代码:

    class TimeStampType(DjangoObjectType):
        class Meta:
            model = TimeStamp
    
    class ProcessedStockAmountsType(DjangoObjectType):
        timeStampID = graphene.Field(TimeStampType, id=graphene.Int())
        class Meta:
            model = ProcessedStockAmounts 
    
        def resolve_timeStampID(self, info, **kwargs):
            id = kwargs.get('id')
            if self.timeStampID.id == id:
                return self.timeStampID
    
    class ProductcontainersType(DjangoObjectType):
        class Meta:
            model = Productcontainers 
    
    class ProductlistType(DjangoObjectType):
        class Meta:
            model = Productlist 
    
    class Query(graphene.ObjectType):
        list_productcontainers = graphene.List(ProductcontainersType)
    
        def resolve_list_productcontainers(self, context, **kwargs):
            return Productcontainers.objects.all()
    

    到现在为止,我几乎已经阅读了石墨烯的所有内容,但如果你有一个链接,可以反映出我想做的事情,我会非常感激。

    我的最后一个选择是两个调用,在这里我得到所有的容器id,另一个调用,在这里我得到某个日期的所有金额(容器id),而在两个for循环中,我只是将金额添加到相应的容器中…:(

    0 回复  |  直到 7 年前
    推荐文章