GraphQL-Неизвестный аргумент \ страна \ в поле \ allNews \ типа \ Query \.,

Здесь новичок в 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
        }
      ]
    }
  ]
}

person Proteeti Prova    schedule 02.02.2020    source источник
comment
Вы забыли добавить "страну" в свой all_news = DjangoFilterConnectionField( NewsType, filterset_class=NewsTypeFilter, time=graphene.String())   -  person engin_ipek    schedule 02.02.2020
comment
Добавление страны тоже не решило этой проблемы.   -  person Proteeti Prova    schedule 04.02.2020


Ответы (1)


Прежде всего, я удалил NewsTypeFilter из моей схемы, потому что он возвращает то же самое, что и мой NewsType. Затем я добавил country с другими полями на моем NewsType. Это в значительной степени решило проблему.

Я предполагаю, что добавление filterType сначала создало проблему.

person Proteeti Prova    schedule 09.02.2020