Средство распознавания графена для вложенного пользовательского объекта - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь использовать графен для моделирования следующих данных: объект MessageFrequency, который представляет количество сообщений, отправленных в определенный день для определенного чата, и объект MessageFrequencyRange, который представляет количество сообщенийотправляется в день для диапазона дат, все для данного чата.

Я пытался создать пользовательские классы и смог получить объект MessageFrequency с запросом, выполнив эту запись stackoverflow, но я не уверен, как получить вложенный пользовательский объектза работой.Ниже приведен мой текущий код.

class MessageFrequency(graphene.ObjectType):

    chat_id   = graphene.Int()
    date      = graphene.Date()
    frequency = graphene.Int()


class MessageFrequencyRange(graphene.ObjectType):

    chat_id     = graphene.Int()
    start_date  = graphene.Date()
    end_date    = graphene.Date()
    frequencies = graphene.NonNull(graphene.List(graphene.NonNull(MessageFrequency)))

    def resolve_frequencies(self, info):
        return [
            # some method to instantiate a MessageFrequency object...
            # Query.resolve_message_frequency ?
        ]

class Query(graphene.ObjectType):

    message_frequency = graphene.Field(
        MessageFrequency,
        chat_id=graphene.Int(required=True),
        date=graphene.Date(required=True),
    )
    message_frequency_range = graphene.Field(
        MessageFrequencyRange,
        chat_id=graphene.Int(required=True),
    )

    def resolve_message_frequency(self, info, chat_id, date):
        # test data for now
        return MessageFrequency(
            chat_id=9000,
            date=date,
            frequency=1
        )

    def resolve_message_frequency_range(self, info):
        # Should be creating a MessageFrequencyRange object, but not sure how to fill
        # in the frequencies attribute which isn't a scalar
        return None

Я не уверен, как мне следует разрешать объект MessageFrequencyRange внутри Query, потому что это сложнее, чем разрешение объекта MessageFrequency (как это имеетнескалярные поля).Я также не уверен, как разрешить атрибут frequencies для MessageFrequencyRange, я думаю, что мне следует использовать ранее написанный распознаватель, но я не уверен, как именно его вызвать.

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 22 января 2019

Вчера я сделал вложенный объект. Я постараюсь ответить. Было бы хорошо, если вы разместите свои модели.

 class MessageFrequencyType(DjangoObjectType):
     class Meta:
        model = MessageFrequency # Not sure about the name of your model


 class MessageFrequencyRangeType(DjangoObjectType):
    class Meta:
       model = MessageFrequencyRange # Not sure about the name of your model


class Query(graphene.ObjectType):
    message_frequency = graphene.List(MessageFrequencyType)
    message_frequency_range = graphene.List(MessageFrequencyRangeType)

    def resolve_message_frequency(self, info, **kwargs):
        return MessageFrequency.objects.all()

    def resolve_message_frequency_range(self, info, **kwargs):
        return MessageFrequencyRange.objects.all()


class CreateMessageFrequency(graphene.Mutation):
    chat_id = graphene.Int()
    date = graphene.Date()
    frequency = graphene.Int()

   class Arguments:
       chat_id = graphene.Int()
       date = graphene.Date()
       frequency = graphene.Int()

   def mutate(self, info, chat_id, date, frequency):
       message_frequency = MessageFrequency(
           chat_id=chat_id,
           date=date,
           frequency=frequency,
       )
       message_frequency.save()

   return CreateMessageFrequency(
       chat_id=message_frequency.chat_id,
       date=message_frequency.date,
       frequency=message_frequency.frequency
   )


class CreateMessageFrequencyRange(graphene.Mutation):
    chat_id = graphene.Int()
    start_date = graphene.Date()
    end_date = graphene.Date()
    frequencies = graphene.Field(MessageFrequencyType)

   class Arguments:
       chat_id = graphene.Int()
       start_date = graphene.Date()
       end_date = graphene.Date()
       frequencies = graphene.Int()

   def mutate(self, info, chat_id, start_date, end_date, frequencies):
       chat_id=chat_id
       start_date=start_date
       end_date=end_date
       frequencies = MessageFrequency.objects.filter(id=frequencies).first()
       if not frequencies:
          raise Exception('Message Frequency not found')

   MessageFrequencyRange.objects.create(
       chat_id=chat_id,
       start_date=start_date,
       end_date=end_date,
       frequencies=frequencies
   )

   return CreateMessageFrequencyRange(
       chat_id=chat_id,
       start_date=start_date,
       end_date=end_date,
       frequencies=frequencies
   )


class Mutation(graphene.ObjectType):
    create_message_frequency = CreateMessageFrequency.Field()
    create_message_frequency_range = CreateMessageFrequencyRange.Field()
...