【问题标题】:GraphQL-"Unknown argument \"country\" on field \"allNews\" of type \"Query\".",GraphQL-“未知参数 \"country\" 在类型 \"Query\" 的字段 \"allNews\" 上。",
【发布时间】:2020-05-18 06:40:13
【问题描述】:

GraphQL 新手在这里。 所以我试图在 Django 中使用石墨烯编写一个模式,它将国家参数作为字符串,时间参数作为字符。查询与“时间”参数一起工作正常,但每当我添加“国家”参数时。它会引发以下错误"Unknown argument \"country\" on field \"allNews\" of type \"Query\".",。这是我的架构和类型:

类型:

class NewsType(DjangoObjectType):
    class Meta:
        model = News
        fields = ('id', 'site_name', 'title', 'link', 'content', 'thumbnail', 'status', 'upvote', 'downvote', 'published_date',
                  'paper', 'created_date')
        filter_fields = ['site_name', 'status', 'country']
        interfaces = (CustomNewsNode, )

    vote_status = DjangoFilterConnectionField(UserVoteNewsType)
    def resolve_vote_status(self, info, user_id):

        return self.uservotenews_set.filter(user_id=user_id)

架构:

    class NewsTypeFilter(django_filters.FilterSet):
        class Meta:
            model = News
            fields = ['id', 'site_name', 'title', 'link', 'content', 'thumbnail', 'status', 'upvote', 'downvote', 'published_date',
                      'paper', 'created_date']

class Query(graphene.ObjectType):
    all_news = DjangoFilterConnectionField(
        NewsType,  filterset_class=NewsTypeFilter, time=graphene.String())
     def resolve_all_news(self, info, **kwargs):
        print(kwargs['country'])
        env = environ.Env()
        environ.Env.read_env()
        HOURS_AFTER_NEWS_VISIBLE = env('HOURS_AFTER_NEWS_VISIBLE')
        timeDiff = datetime.now() - timedelta(hours=int(HOURS_AFTER_NEWS_VISIBLE))

        if kwargs['time']:  # if user clicks on sort by button
            if(kwargs['time'] == 'd'):
                time = 1
            elif (kwargs['time'] == 'w'):
                time = 7
            elif (kwargs['time'] == 'm'):
                time = 30
            elif (kwargs['time'] == 'y'):
                time = 365
            else:
                time = 1000
            end_of_give_time_period = datetime.now(
            ) - timedelta(days=int(HOURS_AFTER_NEWS_VISIBLE))
            start_of_given_time_period = end_of_give_time_period - \
                timedelta(days=time)
            allNews = News.objects.order_by('created_date').filter(status=True,
                                                                   created_date__lte=end_of_give_time_period, created_date__gte=start_of_given_time_period).order_by('-upvote')
        else:
            allNews = News.objects.order_by(
                '-created_date').filter(status=True).filter(created_date__lte=timeDiff)

        if 'country' in kwargs:
            countryId = Country.objects.filter(
                name=kwargs['country'][0]).values_list('pk', flat=True)
            allNews = allNews.filter(country__in=[countryId[0]])

        return allNews

但是每当我输入查询时,它都会返回以下错误:

查询:

query{
  allNews (time :"w", country: "Bangladesh") {
    edges{
      node{
        title
        upvote
        createdDate
      }
}
  }

}

输出:

{
  "errors": [
    {
      "message": "Unknown argument \"country\" on field \"allNews\" of type \"Query\".",
      "locations": [
        {
          "line": 2,
          "column": 23
        }
      ]
    }
  ]
}

【问题讨论】:

  • 您忘记在all_news = DjangoFilterConnectionField( NewsType, filterset_class=NewsTypeFilter, time=graphene.String()) 中添加“国家/地区”
  • 添加国家也没有解决。

标签: python django graphql graphene-python graphene-django


【解决方案1】:

首先,我从架构中删除了NewsTypeFilter,因为它返回的结果与我的NewsType 相同。然后我在NewsType 的其他字段中添加了country。这几乎解决了这个问题。

我猜一开始添加 filterType 会产生问题。

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2017-02-03
    • 1970-01-01
    • 2019-03-28
    • 2019-01-15
    • 2020-11-27
    • 2021-11-13
    • 2017-09-06
    • 2020-10-26
    相关资源
    最近更新 更多